NumPy是一个Python科学计算库,它提供了基于数组的计算和高效处理大型多维数组的能力。以下是一些NumPy库的主要功能:
- 处理数组操作和数学计算
- 创建多维数组对象ndarray,以及针对这些数组的通用函数
- 支持快速矩阵运算和线性代数运算
- 对科学计算中的常量、随机数、傅里叶变换等领域提供了支持
下面是一些基本的操作与用法:
1.导入NumPy:
import numpy as np
2.创建一个数组:
a = np.array([1, 2, 3])
3.创建一个多维数组:
b = np.array([[1, 2], [3, 4]])
4.检查数组的形状:
a.shape #返回(3,)
b.shape #返回(2, 2)
5.改变数组形状:
b.reshape(4, 1)
6.索引和切片:
a[1] #返回2
b[0, 1] #返回2
b[:, 0] #返回[1, 3]
7.数组的运算:
a + 1 #返回array([2, 3, 4])
a * 2 #返回array([2, 4, 6])
a.dot(b) #返回array([14, 20])
8.数组的统计分析:
np.max(a) #返回3
np.min(a) #返回1
np.mean(a) #返回2.0
np.std(a) #返回0.816496580927726
np.var(a) #返回0.6666666666666666
NumPy是Python数据分析和科学计算的重要工具,掌握基本操作和常用库函数可以帮助用户处理大量的计算数据和数组处理。
NumPy最大的优点就是它的 Vectorization(向量化)处理方式。这个功能利用了现代CPU的SIMD指令集,可以在硬件级别上将大量操作并行化。
例如,使用Python的for循环来计算向量的值积,代码如下:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
dot = 0
for i, j in zip(a, b):
dot += i * j
而同样的计算可以使用NumPy的dot函数简单地实现:
dot = np.dot(a, b)
向量化相当于将以上计算转化为指令级别的并行运算,在 NumPy 库中这个功能得到了最大的最优化,在处理大型数据集上的表现十分出色。
NumPy的另一个重要功能是提供了广播的能力。由于numpy的数组是高度可定制的,NumPy就可以“广播”数组中的数值来执行在更高维度的“重复”操作。
广播的规则如下:
- 如果两个数组的秩不同,则将较小的数组的形状与“1”填充,使它们的形状相同。
- 如果两个数组在任何一个维度上的大小都不相等且不等于1,那么这两个数组不可广播,计算会抛出ValueError异常。
- 如果两个数组在任何一个维度上大小相等,或者其中一个数组在该维度上的大小为1,那么可以进行广播。
以下是广播的一个例子:
import numpy as np
a = np.array([1, 2, 3])
b = 2
c = a * b
print(c) #返回[2, 4, 6]
在这个例子中,标量值b被“广播”成一个具有与a相同形状的数组,然后与a相乘。在广播的过程中,NumPy会自动对b进行复制和重复,以使其与a具有相同的形状,从而能够执行元素级别的乘法操作。
最后,在使用NumPy时,我们还需要关注数据的类型和内存布局等问题。NumPy数组的元素通常是单一数据类型,否则NumPy会把它们看作是Python对象。因此,将数据类型确定下来是非常重要的。在NumPy中,数据类型是由每个元素的字节数和内部位号方式构成的。
像 NumPy 这样的设计,使得处理大量计算的数组变得轻松快捷,不受Python原生数组和循环处理的限制。