numpy是Python中处理数值计算的重要库之一,提供了高效的数组(array)数据结构,方便进行向量、矩阵运算等线性代数操作。其中最基本的数据结构np.array就是本文重点介绍的对象,本文将依次从创建、基础操作、多维数组、专用函数、文件读写等角度对np.array进行详细的阐述。
np.array可以从Python list或tuple创建数组,例如:
import numpy as np
a = np.array([1, 2, 3])
b = np.array((4, 5, 6))
print(a) #[1, 2, 3]
print(b) #[4, 5, 6]
也可以直接传递多维list或tuple创建多维数组:
a = np.array([[1, 2], [3, 4], [5, 6]])
print(a)
[[1 2]
[3 4]
[5 6]]
另外,np.zeros、np.ones、np.empty等专门用于创建特定形状数组的工厂函数也是常用的创建数组方式,例如:
a = np.zeros((3, 4))
print(a)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
上例中,np.zeros((3, 4))将返回一个3×4全是0的数组。一些常用的特定形状数组的创建方式如下表:
一般对数组的操作都是基于数组的索引,即数组元素位置,例如:
a = np.array([10, 20, 30])
print(a[0]) #10
a[0] = 100
print(a) #[100 20 30]
此外,np.array还支持reshape、transpose、矩阵乘法等基础数学操作。
reshape是重新定义数组的形状(即由维度转换为另一维度形状),例如:
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape((3, 2))
print(b)
[[1 2]
[3 4]
[5 6]]
transpose是交换数组的维度(即将原数组的行列方向互换),例如:
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.transpose()
print(b)
[[1 4]
[2 5]
[3 6]]
注意:transpose函数也可使用np.transpose(a)调用。
矩阵乘法可使用@或dot函数实现:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = a@b
print(c)
[[19 22]
[43 50]]
d = np.dot(a, b)
print(d)
[[19 22]
[43 50]]
在多元数组中,我们需要特别注意数组的索引方式。例如,对于一个三维数组a,要取其中的(0,1,1)位置元素,可以使用a[0][1][1]、a[0,1,1]等方式。
多维数组的创建可以参考上述创建数组的方式。另外,reshape函数也可用于多维数组的形状变换。
numpy库提供了大量方便数组操作的专用函数,例如对于下面的一维数组:
a = np.array([1, 2, 3, 4, 5])
可以使用np.mean计算平均值、np.std计算标准差等专用函数:
m = np.mean(a)
print(m) #3.0
s = np.std(a)
print(s) #1.4142...
同时,在多元数组上,这些函数也有着相应的表现,例如:
a = np.array([[1, 2, 3], [4, 5, 6]])
m = np.mean(a)
print(m) #3.5
s = np.std(a, axis=0)
print(s) #[1.5 1.5 1.5]
上例中,np.std函数在axis=0(即列方向)计算标准差,返回数组中每一列的标准差。
numpy库提供了方便的读写全局变量的numpy.ndarray类型(即数组)的函数,其中最基本的函数是np.save和np.load,可以将文件保存为二进制形式文件和重新加载文件。例如,对于以下二维数组:
a = np.array([[1, 2, 3], [4, 5 ,6]])
可以使用np.save保存为文件:
np.save('a.npy', a)
然后使用np.load重新加载存储为文件的数组:
b = np.load('a.npy')
print(b)
[[1, 2, 3],
[4, 5, 6]]
注意:保存的文件具有二进制格式,因此在加载时不需要定义数组形状
综上所述,numpy中的np.array函数是Python中处理高维数值计算的重要库之一,具有多种方便的数据结构和操作,可以方便地构建和操作数组。希望本文能够对读者对np.array的理解和实践有所帮助。
标签: 心情