NumPy数组
NumPy数组的维数称为秩,也就是轴,一维数组的轴为1,二维数组的轴为2,以此类推。
如果声明axis=0代表沿着第0轴进行操作(对每一列进行操作),axis=1则表示沿着第1轴进行操作,对每一行进行操作,其中在NumPy中比较重要的ndarray对象属性有:
ndarry.ndim :表示轴的数量,数组的维数
ndarry.shape 数组的维度,对于矩阵,n行m列
ndarry.size 数组元素的总个数,相当于shape中的n*m的值
ndarry.dtype ndarray对象的元素类型
ndarry.itemsize 每个元素的大小,以字节为单位表示
ndarry.flags 内存信息
ndarry.real 元素的实部
ndarry.imag 元素的虚部
下面来实现一个数组转换:
import numpy as np
a=np.arange(36);
print(a.ndim)
# 调整维度
b=a.reshape(3,4,2)
print(b.ndim)
调试后:
D:\Eappliance\PythonAll\python376\python376.exe D:/AProjectS/Pyaaz/venv/src/numpyarry.py
Traceback (most recent call last):
File "D:/AProjectS/Pyaaz/venv/src/numpyarry.py", line 5, in <module>
b=a.reshape(3,4,2)
ValueError: cannot reshape array of size 36 into shape (3,4,2)
1
从错误信息中我们可知,我们重新定义的数据维度必须取余后为零,也就是3*4*2不等于36造成的这个错误,我们修改程序后再次运行
import numpy as np
a=np.arange(36);
print(a.ndim)
# 调整维度
b=a.reshape(3,4,3)
print(b.ndim)
运行结果:
D:\Eappliance\PythonAll\python376\python376.exe D:/AProjectS/Pyaaz/venv/src/numpyarry.py
1
3
Process finished with exit code 0
接下来代码原来一样:
aa=np.array([[1,2],[9,8]])
aa.shape=(4,1)
print(aa)
运行结果:
[[1]
[2]
[9]
[8]]
Process finished with exit code 0
ndarry.itemsize以字节的形式返回数组中每一个元素的大小
对于complex128类型的数组,它的itemsize的大小为16(占有128bit,每个字节长度为8,故攻占有16个字节)
aa=np.array([[1,2],[9,8]],dtype=np.complex128) aa.shape=(4,1) print(aa.itemsize)
运行结果:
16 Process finished with exit code 0
ndarry.flags
ndarry.flags属性返回的是ndarry对象的内存信息,包括以下属性
C_CONTIGUOUS (C) 数据是在一个单一的C风格的连续段中
F_CONTIGUOUS (F) 数据是在一个单一的Fortran风格的连续段中
OWNDATA (O) 数组拥有它所使用的内存或从另一个对象中借用它
WRITEABLE (W) 数据区域可以被写入,将该值设置为 False,则数据为只读
ALIGNED (A) 数据和所有元素都适当地对齐到硬件上
UPDATEIFCOPY (U) 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新