Numpy

应用

Numerical Python是Python的一个拓展程序库,支持大量维度数组和矩阵运算。为开放的源代码并且由许多协作者共同维护开发,其运行速度很快。 Numpy通常与:

  • Scipy(科学工程计算)
  • Matplotlib(绘图)

一起使用

1
2
3
from numpy import *#导入numpy库

eye(4)#生成对角矩阵

Numpy的Ndarray对象

基本形式如下: numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 其中:

  • object: 要进行操作的数组
  • dtype: 元素的数据类型(后面会有介绍)
  • copy: 对象是否复制
  • order: 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
  • subok: 默认返回一个与基类类型一致的数组
  • ndmin: 指定生成数组的最小维度

数据类型

Numpy的数据类型较多,具体可以在这里找到

数据类型对象(dtype)

numpy.dtype描述了数据的以下方面:

  • 数据的类型(整数,浮点数)
  • 数据大小(用多少字节去存储)
  • 数据的字节顺序 等等 小端法:最小值存储在最小的地址。 大端法:最重要的字节存储在最小的地址。

dtype对象使用如下语法: numpy.dtype(object,align,copy) 关于其的详细用法我们可以通过如下例子来解释:

1
2
3
4
5
6
7
8
9
import numpy as np

dt = np.dtype([('age',np.int8)])#规定了一个数据类型对象,可以套用在其他Ndarray上。

a = np.array([(10),(20),(30)],dtype = dt)

print(a['age'])

print(a)

结果为:

1
2
[10,20,30]
[(10),(20),(30)]

(其中的有无括号区别我也不清楚,此处存疑问老师) 我们也可以用另一个例子来加深理解:

1
2
3
4
5
6
7
import numpy as np

student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])

a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)

print(a['name'].dtype)

可以看到,np.dtype将三种数据属性(名称和类型)对应到了np.array上,name对应一列,age对应一列,并分别规定了类型(int8对应i1,此类i2,i3,i4乘以8即可)等等

Numpy数据类型

Numpy数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2。 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。

  • axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作。
  • axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

一些比较重要的nadarray对象属性:

属性 说明
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n行m列
ndarray.size 数组元素的总个数,相当于.shape中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray 元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

我们引用实例:

  • ndarray.ndim
1
2
3
4
5
6
7
8
9
10
11
import numpy as np

a = np.arange(24)

print(a.ndim)

b = a.reshape(2,4,3) #调整其维度

print(b.ndim)

print(b)

可自行运行,结果为两个4*3矩阵列表。

  • ndarray.shape
1
2
3
4
5
a = np.array([[1,2,3],[4,5,6]])

a.shape = (3,2)

print(a)

其结果将2*3的矩阵转化为3*2

  • ndarray.itemsize ndarray.itemsize 以字节的形式返回数组中每一个元素的大小。 例如,一个元素类型为 float64 的数组 itemsize 属性值为 8(float64 占用 64 个 bits,每个字节长度为 8,所以 64/8,占用 8 个字节),又如,一个元素类型为 complex32 的数组 item 属性为 4(32/8)。
1
2
3
4
5
# 数组的 dtype 为 float64(八个字节) 

y = np.array([1,2,3,4,5], dtype = np.float64)

print (y.itemsize)

结果为8。

  • ndarray.flags ndarray.flags 返回 ndarray 对象的内存信息。 关于内存知识没有太大学习兴趣,在此不再赘述。

Numpy创建数组

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

  • numpy.empty numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组: numpy.empty(shape, dtype = float, order = ‘C’) order(c或者f)表示行优先或列优先。
1
2
3
x = np.empty([3,2], dtype = int) 

print (x)

结果的数组元素为随机值,未初始化。 同样的用法还有

  • numpy.zeros
  • numpy.ones