数据类型的处理
前言
续上一小节,我们创建了一系列的数组,那么我们之后要做的便是对着这些数组进行简要的操作,本小节介绍的将是数组维度的查询,以及数组的数据类型的转换。话不多说,大家请上车。
数组维度的查询
在查询数组维度之前得有数组啊,因此我在进行每一个数组的操作时都会随意弄了一个数组(之前看过我作品的应该都知道)
查看数组的维数
查看维度使用ndim()函数,下面以一维和二维做对比,一维以向量为例,二维以矩阵为例。
import numpy as np # 这样引入能大大减少编码时间
arr_1 = np.arange(10) # 生成一维度的向量
arr_2 = np.random.randn(2,3) # 生成2*3的数组矩阵
print("arr_1的维度是:", arr_1.ndim)
print("arr_2的维度是:", arr_2.ndim)
arr_1的维度是: 1
arr_2的维度是: 2
注:日后的文章都会尽量使用这种类型的格式来输出结果
查看数组有多少个行和列
查看行数和列数可以使用shape()函数,该函数返回的是一个(rows,cols)形式的结果。
arr_3 = np.random.randn(7,5) # 生成7*5的数组矩阵
arr_3.shape # 显示矩阵的行列数
# 单独输出行列
print("arr_3的行数为:", arr_3.shape[0])
print("arr_3的行数为:", arr_3.shape[1])
arr_3的行数为: 7
arr_3的行数为: 5
数据的数据类型操作
在了解数组的维度,尺寸大小之后呢,就要来深析数组的内部信息,这边介绍的是数组内的数据类型定义与转换。
首先查看数组数据类型的规则
查看数据类型使用dtypr()函数
在生成数据之中,假设你数据全是同样的形式,那么他生成的数组的数据类型就是你输入的形式(如arr_5),那么假设你输入的数组中有一个与其他类型不一样,数组就会按精度更高的数据类型生成数组(如arr_4)。
arr_4 = np.array([1 ,2.5 ,6 ,8.5])
print("arr_4的数组内容为:\n", arr_4)
print("arr_4的数据类型为:", arr_4.dtype)
arr_5 = np.array([1 ,3 ,5,7])
print("arr_5的数组内容为:\n", arr_5)
print("arr_5的数据类型为:", arr_5.dtype)
arr_4的数组内容为:
[1. 2.5 6. 8.5]
arr_4的数据类型为: float64
arr_5的数组内容为:
[1 3 5 7]
arr_5的数据类型为: int32
定义数据类型的格式
自定义数据类型也是用dtype函数,此处应加在结尾。
数据既然这么善变,我们肯定是有办法将它封印住的,在变量的后面可自定义dtype。同样我们将arr_4强制转为整型,将arr_5强制转换为浮点型。
arr_6 = np.array(arr_4, dtype = np.int32)
print("arr_6的数据类型为:",arr_6.dtype)
# 对比改变前后的变化
print("arr_4的数组内容为:\n", arr_4)
print("arr_6的数组内容为:\n", arr_6)
arr_7 = np.array(arr_5, dtype = np.float64)
print("arr_7的数据类型为:", arr_7.dtype)
arr_8 = np.array([1.2, 3.6, 5, 8.8, 9], dtype = np.int32)
print("arr_8的数组内容为:\n", arr_8)
print("arr_8的数据类型为:", arr_8.dtype)
arr_6的数据类型为: int32
arr_4的数组内容为:
[1. 2.5 6. 8.5]
arr_6的数组内容为:
[1 2 6 8]
arr_7的数据类型为: float64
arr_8的数组内容为:
[1 3 5 8 9]
arr_8的数据类型为: int32
注:在使用自定义将浮点型转为整型时,系统并不会自己进行四舍五入,而是直接将小数点后面全砍掉,只保留整数部分。
数据类型的转换
转换数据类型用astype()函数
难免有时候会使用别人的数据,或是生米煮成了熟饭时,我们无法再去定义数据的类型,那我们将进行数据的转换。只要满足一定条件,就连字符型的数据也可转化为浮点型。
arr_9 = np.array([-3.2, 1.2, 2.5, 0.9, 6.6]) # 生成数组arr_9
print ("arr_9的数据类型为:",arr_9.dtype)
arr_10 = arr_9.astype(np.int32) # 将arr_9转换数据类型
print("arr_10的数据类型为:",arr_10.dtype)
arr_11 = np.array(['1.25', '3.87', '9.93', '8'], dtype = np.string_) # 生成一个字符型的数组
print("arr_11的数据类型为:", arr_11.dtype)
arr_12 = arr_11.astype(np.float64) # 强制转换为浮点型
print("arr_12的数据类型为:", arr_12.dtype)
arr_9的数据类型为: float64
arr_10的数据类型为: int32
arr_11的数据类型为: |S4
arr_12的数据类型为: float64
小结一下
本片文章主要讲了两个函数
- dtype()函数:两个功能
- 查看数据类型
- 自定义数据类型
- astype()函数:主要就一个功能强制转换 括号里是什么类型就转换为什么类型
完整代码献上
import numpy as np # 这样引入能大大减少编码时间
arr_1 = np.arange(10) # 生成一维度的向量
arr_2 = np.random.randn(2,3) # 生成2*3的数组矩阵
print("arr_1的维度是:", arr_1.ndim)
print("arr_2的维度是:", arr_2.ndim)
arr_3 = np.random.randn(7,5) # 生成7*5的数组矩阵
arr_3.shape # 显示矩阵的行列数
# 单独输出行列
print("arr_3的行数为:", arr_3.shape[0])
print("arr_3的行数为:", arr_3.shape[1])
# dtype
arr_4 = np.array([1 ,2.5 ,6 ,8.5])
print("arr_4的数组内容为:\n", arr_4)
print("arr_4的数据类型为:", arr_4.dtype)
arr_5 = np.array([1 ,3 ,5,7])
print("arr_5的数组内容为:\n", arr_5)
print("arr_5的数据类型为:", arr_5.dtype)
arr_6 = np.array(arr_4, dtype = np.int32)
print("arr_6的数据类型为:",arr_6.dtype)
# 对比改变前后的变化
print("arr_4的数组内容为:\n", arr_4)
print("arr_6的数组内容为:\n", arr_6)
arr_7 = np.array(arr_5, dtype = np.float64)
print("arr_7的数据类型为:", arr_7.dtype)
arr_8 = np.array([1.2, 3.6, 5, 8.8, 9], dtype = np.int32)
print("arr_8的数组内容为:\n", arr_8)
print("arr_8的数据类型为:", arr_8.dtype)
# astype使用
arr_9 = np.array([-3.2, 1.2, 2.5, 0.9, 6.6]) # 生成数组arr_9
print ("arr_9的数据类型为:",arr_9.dtype)
arr_10 = arr_9.astype(np.int32) # 将arr_9转换数据类型
print("arr_10的数据类型为:",arr_10.dtype)
arr_11 = np.array(['1.25', '3.87', '9.93', '8'], dtype = np.string_) # 生成一个字符型的数组
print("arr_11的数据类型为:", arr_11.dtype)
arr_12 = arr_11.astype(np.float64) # 强制转换为浮点型
print("arr_12的数据类型为:", arr_12.dtype)