NumPy是Python语言的一个扩展库,是Numeric Python的缩写,是一个用于科学计算的开源软件包。它提供了高效的多维数组对象,以及针对这些数组执行快速操作的工具。NumPy的核心功能是numpy.ndarray,即一种能够表示任意维度的数组对象。这篇文章将介绍NumPy的基础知识以及一些常用操作。
安装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 np
a = np.array([1, 2, 3])
print(a)
输出结果:
[1 2 3]
可以通过调用数组的shape属性来查看其形状:
print(a.shape)
输出结果:
(3,)
在上面的代码中,np.array()函数将Python列表转换为NumPy数组。
创建多维数组
除了一维数组,NumPy还可以创建多维数组,也称为ndarray。以下是一个创建二维数组的示例:
import numpy as np
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
输出结果:
[[1 2 3]
[4 5 6]]
可以使用b.shape属性查看数组的形状
print(b.shape)
输出结果:
(2, 3)
NumPy数组的基本操作
NumPy提供了许多对数组进行操作的函数和方法。以下是一些基本操作的示例:
访问数组元素
可以通过下标访问数组中的元素。例如,以下代码将访问数组a中的第二个元素:
import numpy as np
a = np.array([1, 2, 3])
print(a[1])
输出结果:
2
对于多维数组,可以使用逗号分隔的下标访问元素。例如,以下代码将访问数组b中的第二行第三列元素:
import numpy as np
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b[1, 2])
输出结果
6
切片数组
可以使用切片操作来访问数组的一个或多个子集。例如,以下代码将访问数组a中的前两个元素:
import numpy as np
a = np.array([1, 2, 3])
print(a[:2])
输出结果:
[1 2]
对于多维数组,可以对每个维度使用切片。例如,以下代码将访问数组b的第一行和第二行的前两列
import numpy as np
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b[:2, :2])
输出结果:
[[1 2]
[4 5]]
修改数组
可以通过下标或切片修改数组中的元素。例如,以下代码将修改数组a中的第二个元素:
import numpy as np
a = np.array([1, 2, 3])
a[1] = 4
print(a)
输出结果:
[1 4 3]
对于多维数组,可以使用下标或切片修改单个元素或子集。例如,以下代码将修改数组b中的第一行第二列元素:
import numpy as np
b = np.array([[1, 2, 3], [4, 5, 6]])
b[0, 1] = 7
print(b)
输出结果:
[[1 7 3]
[4 5 6]]
数组运算
NumPy提供了许多对数组进行运算的函数和方法。以下是一些基本运算的示例:
- 加法:可以使用+运算符将两个数组相加。例如,以下代码将计算数组a和数组b的和
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
print(c)
输出结果:
[5 7 9]
- 乘法:可以使用*运算符将两个数组相乘。例如,以下代码将计算数组a和数组b的乘积:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a * b
print(c)
输出结果:
[ 4 10 18]
- 平方根:可以使用np.sqrt()函数计算数组中每个元素的平方根。例如,以下代码将计算数组a中每个元素的平方根:
import numpy as np
a = np.array([1, 4, 9])
b = np.sqrt(a)
print(b)
输出结果:
[1. 2. 3.]
广播
广播是NumPy的一种强大的特性,它可以使不同形状的数组进行算术运算。广播规则是将较小的数组沿着缺失的维度进行扩展以匹配较大数组的形状。例如,以下代码将计算数组a和标量值2的和:
import numpy as np
a = np.array([1, 2, 3])
b = a + 2
print(b)
输出结果:
[3 4 5]
在这个例子中,标量值2被广播成一个形状与数组a相同的数组,然后与数组a相加。
数组转置
数组转置是指将数组的行和列交换。在NumPy中,可以使用数组的T属性或np.transpose()函数来转置数组。例如,以下代码将转置数组a:
import numpy as np
a = np.array([[1, 2], [3, 4], [5, 6]])
b = a.T
print(b)
输出结果:
[[1 3 5]
[2 4 6]]
聚合
聚合是指对数组进行统计操作,例如求和,求平均值,计算标准差等。在NumPy中,可以使用数组的方法或函数来执行各种聚合操作。例如,以下代码将计算数组a的总和:
import numpy as np
a = np.array([1, 2, 3])
b = a.sum()
print(b)
输出结果:
6
创建随机数组
NumPy提供了许多函数来创建随机数组。这些函数可以用于模拟随机过程,生成测试数据等。以下是一些常用的函数:
- np.random.rand(): 创建一个指定形状的随机数组,数组元素的取值范围为0到1之间。
- np.random.randn(): 创建一个指定形状的随机数组,数组元素的取值符合标准正态分布。
- np.random.randint(low, high, size): 创建一个指定形状的随机整数数组,数组元素的取值范围为low到high之间。
- np.random.random_sample(size): 创建一个指定形状的随机数组,数组元素的取值范围为0到1之间。
以下是一些示例代码:
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提供了许多函数来操作数组的形状。以下是一些常用的函数:
- ndarray.reshape(): 重塑数组的形状,返回一个新的数组,不改变原数组。
- ndarray.resize(): 修改数组的形状,改变原数组。
- ndarray.flatten(): 将数组展开成一个一维数组。
- ndarray.ravel(): 将数组展平成一个一维数组,返回一个视图,不改变原数组。
- np.newaxis: 在数组中插入新维度。
以下是一些示例代码:
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()等。以下是一些常用的函数:
- ndarray.sort(): 对数组进行排序。
- np.argsort(): 返回数组元素从小到大排序后的索引。
- np.lexsort(): 返回按照多个关键字排序后的索引。
- np.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()等。以下是一些常用的函数:
- ndarray.mean(): 计算数组的平均值。
- ndarray.std(): 计算数组的标准差。
- ndarray.var(): 计算数组的方差。
- ndarray.min(): 返回数组的最小值。
- ndarray.max(): 返回数组的最大值。
- ndarray.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