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) 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

posted @ 2020-01-20 09:09  Super~me  阅读(273)  评论(0编辑  收藏  举报