NumPy是Python语言的一个扩展库,是Numeric Python的缩写,是一个用于科学计算的开源软件包。它提供了高效的多维数组对象,以及针对这些数组执行快速操作的工具。NumPy的核心功能是numpy.ndarray,即一种能够表示任意维度的数组对象。这篇文章将介绍NumPy的基础知识以及一些常用操作。
在使用NumPy之前,需要先安装它。可以使用pip或conda来安装NumPy。在命令行中输入以下命令可以安装NumPy:
使用pip:
pip install numpy
使用conda:
conda install numpy
导入NumPy
安装完NumPy之后,需要在Python代码中导入NumPy才能使用它的功能。可以使用以下代码导入NumPy:
import numpy as np
以上代码将NumPy库导入并将其命名为np。在接下来的代码中,可以使用np来访问NumPy的函数和对象。
创建NumPy数组
NumPy中的核心对象是数组,也称为ndarray。可以使用以下代码创建一个简单的一维NumPy数组
import numpy as npa = np.array([1, 2, 3])
print(a)
输出结果:
[1 2 3]
可以通过调用数组的shape属性来查看其形状:
print(a.shape)
输出结果:
(3,)
在上面的代码中,np.array()函数将Python列表转换为NumPy数组。
创建多维数组
除了一维数组,NumPy还可以创建多维数组,也称为ndarray。以下是一个创建二维数组的示例:
import numpy as npb = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
输出结果:
[[1 2 3][4 5 6]]
可以使用b.shape属性查看数组的形状
print(b.shape)
输出结果:
(2, 3)
NumPy提供了许多对数组进行操作的函数和方法。以下是一些基本操作的示例:
可以通过下标访问数组中的元素。例如,以下代码将访问数组a中的第二个元素:
import numpy as npa = np.array([1, 2, 3])
print(a[1])
输出结果:
2
对于多维数组,可以使用逗号分隔的下标访问元素。例如,以下代码将访问数组b中的第二行第三列元素:
import numpy as npb = np.array([[1, 2, 3], [4, 5, 6]])
print(b[1, 2])
输出结果
6
可以使用切片操作来访问数组的一个或多个子集。例如,以下代码将访问数组a中的前两个元素:
import numpy as npa = np.array([1, 2, 3])
print(a[:2])
输出结果:
[1 2]
对于多维数组,可以对每个维度使用切片。例如,以下代码将访问数组b的第一行和第二行的前两列
import numpy as npb = np.array([[1, 2, 3], [4, 5, 6]])
print(b[:2, :2])
输出结果:
[[1 2][4 5]]
可以通过下标或切片修改数组中的元素。例如,以下代码将修改数组a中的第二个元素:
import numpy as npa = np.array([1, 2, 3])
a[1] = 4
print(a)
输出结果:
[1 4 3]
对于多维数组,可以使用下标或切片修改单个元素或子集。例如,以下代码将修改数组b中的第一行第二列元素:
import numpy as npb = np.array([[1, 2, 3], [4, 5, 6]])
b[0, 1] = 7
print(b)
输出结果:
[[1 7 3][4 5 6]]
NumPy提供了许多对数组进行运算的函数和方法。以下是一些基本运算的示例:
import numpy as npa = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
print(c)
输出结果:
[5 7 9]
import numpy as npa = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a * b
print(c)
输出结果:
[ 4 10 18]
import numpy as npa = np.array([1, 4, 9])
b = np.sqrt(a)
print(b)
输出结果:
[1. 2. 3.]
广播是NumPy的一种强大的特性,它可以使不同形状的数组进行算术运算。广播规则是将较小的数组沿着缺失的维度进行扩展以匹配较大数组的形状。例如,以下代码将计算数组a和标量值2的和:
import numpy as npa = np.array([1, 2, 3])
b = a + 2
print(b)
输出结果:
[3 4 5]
在这个例子中,标量值2被广播成一个形状与数组a相同的数组,然后与数组a相加。
数组转置是指将数组的行和列交换。在NumPy中,可以使用数组的T属性或np.transpose()函数来转置数组。例如,以下代码将转置数组a:
import numpy as npa = np.array([[1, 2], [3, 4], [5, 6]])
b = a.T
print(b)
输出结果:
[[1 3 5][2 4 6]]
聚合是指对数组进行统计操作,例如求和,求平均值,计算标准差等。在NumPy中,可以使用数组的方法或函数来执行各种聚合操作。例如,以下代码将计算数组a的总和:
import numpy as npa = np.array([1, 2, 3])
b = a.sum()
print(b)
输出结果:
6
NumPy提供了许多函数来创建随机数组。这些函数可以用于模拟随机过程,生成测试数据等。以下是一些常用的函数:
import numpy as np# 创建一个形状为(2, 3)的随机数组
a = np.random.rand(2, 3)
print(a)# 创建一个形状为(2, 3)的随机整数数组
b = np.random.randint(0, 10, (2, 3))
print(b)# 创建一个形状为(2, 3)的随机数组,元素符合标准正态分布
c = np.random.randn(2, 3)
print(c)
输出结果:
[[0.5163848 0.17251428 0.84763657][0.72554487 0.16582879 0.13572987]]
[[6 3 2][4 8 3]]
[[ 1.19130454 0.23281197 -1.17679426][-0.20791349 -1.41122879 -0.45008923]]
NumPy提供了许多函数来操作数组的形状。以下是一些常用的函数:
import numpy as np# 创建一个形状为(2, 3)的数组
a = np.array([[1, 2, 3], [4, 5, 6]])# 重塑数组的形状
b = a.reshape(3, 2)
print(b)# 修改数组的形状
a.resize(3, 2)
print(a)# 展开数组成一维数组
c = a.flatten()
print(c)# 展平数组成一维数组
d = a.ravel()
print(d)# 在数组中插入新维度
e = a[:, np.newaxis]
print(e.shape)
输出结果:
[[1 2][3 4][5 6]]
[[1 2][3 4
NumPy数组提供了多种排序函数,包括sort()、argsort()、lexsort()、searchsorted()等。以下是一些常用的函数:
import numpy as np# 创建一个数组
a = np.array([3, 1, 2])# 对数组进行排序
a.sort()
print(a) # 输出[1 2 3]# 返回数组元素从小到大排序后的索引
a = np.array([3, 1, 2])
print(np.argsort(a)) # 输出[1 2 0]# 创建一个二维数组
b = np.array([[3, 1, 4], [1, 5, 9]])对数组按照第一列进行排序
idx = np.lexsort(b[:, ::-1].T)
print(b[idx]) # 输出[[1 5 9]
# [3 1 4]]在已排序的数组中查找元素
a = np.array([1, 2, 3, 4, 5])
print(np.searchsorted(a, 3)) # 输出2
print(np.searchsorted(a, 3, side='right')) # 输出3
NumPy数组提供了多种统计函数,包括mean()、std()、var()、min()、max()、sum()等。以下是一些常用的函数:
以下是一些示例代码:
import numpy as np# 创建一个形状为(2, 3)的数组
a = np.array([[1, 2, 3], [4, 5, 6]])# 计算数组的平均值
print(np.mean(a)) # 输出3.5# 计算数组的标准差
print(np.std(a)) # 输出1.707825127659933# 计算数组的方差
print(np.var(a)) # 输出2.9166666666666665# 返回数组的最小值
print(np.min(a)) # 输出1# 返回数组的最大值
print(np.max(a)) # 输出6# 计算数组的和
print(np.sum(a)) # 输出21
下一篇:第06章_多表查询