ndarray对象属性
ndim 数组轴(维度)的个数,轴的个数被称作秩
import numpy as np a = np.arange(24) print(a) #输出为 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23] print(a.ndim) #输出为 1 b = a.reshape(2,4,3) print(b) #输出为 [[[ 0 1 2] # [ 3 4 5] # [ 6 7 8] # [ 9 10 11]] # [[12 13 14] # [15 16 17] # [18 19 20] # [21 22 23]]] print(b.ndim) #输出为 3 print(b.shape) #输出为 (2, 4, 3)
shape 数组的维度,例如一个2排3列的矩阵,它的shape属性将是(2,3)这个元组的长度显然是秩,即维度或者ndim属性;对于一个已经存在的ndarray数组对象而言,可以通过修改形状相关的参数/方法从而改变数组的形状,直接修改数组ndarray的shape值,,要求修改后乘积不变,直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致,当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值
''' 输出为 [[1 2 3] [4 5 6]] (2, 3) [[1 2] [3 4] [5 6]] ''' import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a) print(a.shape) #调整数组大小 a = np.array([[1,2,3],[4,5,6]]) a.shape=(1,6) #输出为 [[1 2 3 4 5 6]] print(a) # reshape 调整数组大小 b = a.reshape(3,2) print(b) #输出为 [[1 2] # [3 4] # [5 6]]
size 数组元素的总个数,等于shape属性中元组元素的乘积
import numpy as np arr = np.arange(18).reshape(2,3,3) print(type(str(arr))) #输出为 <class 'str'> print(arr.shape) #输出为 (2, 3, 3) print(arr.size) #输出为 18
itemsize 数组中每个元素的字节大小,例如一个元素类型为float64的数组itemsize属性值为8(=64/8),又如一个元素类型为complex32的数组item属性为4(=32/8)
import numpy as np #数组的int8 1个字节 x = np.array([1,2,3,4,5], dtype = np.int8) print(x.itemsize) #输出为 1 #数组的float32 4个字节 x = np.array([1,2,3,4,5], dtype = np.float32) print(x.itemsize) #输出为 4
dtype 一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型,不过NumPy提供它自己的数据类型;创建numpy数组的时候可以通过属性dtype显示指定数据类型,如果不指定的情况下,numpy会自动推断出适合的数据类型,所以一般不需要显示给定数据类型,如果需要更改一个已经存在的数组的数据类型,可以通过astype方法进行修改从而得到一个新数组
import numpy as np arr=np.random.randint(1,6,size=(1,3)) print(arr) #输出为 [[5 3 1]] arr=arr.astype(float) print(arr) #输出为 [[5. 3. 1.]]
import numpy as np #使用数组标量类型 dt = np.dtype(np.int32) print(dt) #输出为 int32 #int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他 dt = np.dtype('i4') print(dt) #输出为 int32
import numpy as np dt = np.dtype([('age',np.int8)]) print(dt) #输出为 [('age', 'i1')] #将结构化数据应用于ndarray对象 a = np.array([(10,),(20,),(30,)],dtype = dt) print(a) #输出为 [(10,) (20,) (30,)] #访问age列内容 dt = np.dtype([('age','i1')]) a = np.array([(10,),(20,),(30,)],dtype = dt) print(a['age']) #输出为 [10 20 30] #结构化数据包含多个字段 student = np.dtype([('name','S20'),('age','i1'),('marks','f4')]) a = np.array([('joe',20,80),('susan',22,85),('tom',23,90),('fank',23,33)],dtype=student) print(a) #输出为 [(b'joe', 20, 80.) (b'susan', 22, 85.) (b'tom', 23, 90.) (b'fank', 23, 33.)] print(a['name']) #输出为 [b'joe' b'susan' b'tom' b'fank']
每个数据类型都有一个类型代码,即简写方式