Python科学计算库Numpy:pip安装与基础使用 – wiki基地


Python科学计算库Numpy:pip安装与基础使用

1. 引言:什么是NumPy?

NumPy(Numerical Python)是Python中用于科学计算的核心库。它提供了一个高性能的多维数组对象(ndarray),以及用于处理这些数组的工具。NumPy是许多其他科学计算库(如SciPy、Pandas、Matplotlib)的基础,它的出现极大地推动了Python在数据分析、机器学习和科学研究领域的应用。

NumPy的主要优势在于其处理大型数据集的效率。与Python原生的列表相比,NumPy数组在存储效率、运算速度和功能丰富性上都有显著提升,这得益于其底层用C和Fortran语言实现。

2. 安装NumPy

安装NumPy非常简单,通常使用Python的包管理器pip进行。

2.1 检查Python和pip

在安装NumPy之前,请确保您的系统已经安装了Python和pip。您可以在命令行(Windows的cmd或PowerShell,macOS/Linux的终端)中输入以下命令来检查:

bash
python --version
pip --version

如果两者都已正确安装,您将看到它们的版本信息。如果pip未安装或版本过旧,您可能需要先升级pip

bash
python -m pip install --upgrade pip

2.2 使用pip安装NumPy

一旦确认pip可用,您就可以使用以下命令来安装NumPy:

bash
pip install numpy

这个命令会从Python Package Index (PyPI) 下载最新版本的NumPy并安装到您的Python环境中。

2.3 验证安装

安装完成后,您可以在Python交互式环境中验证NumPy是否安装成功:

“`python
import numpy as np

print(np.version)
“`

如果没有报错并打印出NumPy的版本号,那么恭喜您,NumPy已经成功安装并可以开始使用了!

3. NumPy基础使用

NumPy的核心是其ndarray对象,一个N维数组,用于存储相同数据类型的元素。

3.1 创建NumPy数组

有多种方法可以创建NumPy数组。

3.1.1 从Python列表或元组创建

这是最常见的创建方式。

“`python
import numpy as np

从列表创建一维数组

arr1 = np.array([1, 2, 3, 4, 5])
print(“一维数组:”, arr1)
print(“数据类型:”, arr1.dtype)
print(“形状:”, arr1.shape) # (5,) 表示一个包含5个元素的一维数组

从嵌套列表创建二维数组

arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(“\n二维数组:\n”, arr2)
print(“形状:”, arr2.shape) # (2, 3) 表示2行3列的二维数组
print(“维度:”, arr2.ndim) # 2
“`

3.1.2 使用内置函数创建特定数组

NumPy提供了许多函数来快速创建特定类型的数组,例如全零、全一、空数组或指定范围的数组。

“`python

创建一个3×4的全零数组

zeros_arr = np.zeros((3, 4))
print(“\n全零数组:\n”, zeros_arr)

创建一个2x3x2的全一数组

ones_arr = np.ones((2, 3, 2))
print(“\n全一数组:\n”, ones_arr)

创建一个3×3的空数组(实际内容是随机的,取决于内存状态)

empty_arr = np.empty((3, 3))
print(“\n空数组(内容随机):\n”, empty_arr)

创建一个单位矩阵 (对角线为1,其余为0)

eye_arr = np.eye(3)
print(“\n单位矩阵:\n”, eye_arr)

创建一个指定范围的数组 (类似Python的range)

arange_arr = np.arange(0, 10, 2) # 从0到10(不包括10),步长为2
print(“\narange数组:”, arange_arr)

创建一个指定数量的等间隔数组

linspace_arr = np.linspace(0, 10, 5) # 在0到10之间生成5个等间隔的数
print(“\nlinspace数组:”, linspace_arr)
“`

3.2 数组的属性

每个NumPy数组都有一些有用的属性:

  • dtype: 数组元素的数据类型。
  • shape: 数组的维度(元组形式)。
  • ndim: 数组的维度数量。
  • size: 数组中元素的总数。
  • itemsize: 数组中每个元素的字节大小。

“`python
import numpy as np

arr = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]], dtype=np.float64)

print(“数据类型:”, arr.dtype)
print(“形状:”, arr.shape)
print(“维度:”, arr.ndim)
print(“元素总数:”, arr.size)
print(“每个元素的字节大小:”, arr.itemsize)
“`

3.3 数组索引和切片

NumPy数组的索引和切片与Python列表类似,但更加强大,支持多维数组的灵活操作。

“`python
import numpy as np

arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

获取单个元素

print(“arr[0, 0]:”, arr[0, 0]) # 第一行第一列的元素 (1)
print(“arr[1, 2]:”, arr[1, 2]) # 第二行第三列的元素 (6)

行切片

print(“\n第一行:”, arr[0, :]) # 或 arr[0]
print(“前两行:\n”, arr[:2, :]) # 或 arr[:2]

列切片

print(“\n第二列:”, arr[:, 1])

区域切片

print(“\n子矩阵(左上角2×2):\n”, arr[:2, :2])

布尔索引

选出大于5的元素

boolean_mask = arr > 5
print(“\n布尔掩码:\n”, boolean_mask)
print(“大于5的元素:”, arr[boolean_mask]) # 或 arr[arr > 5]

花式索引(Fancy Indexing)

选取特定行和列

print(“\n特定元素 (arr[0,2], arr[2,1]):”, arr[[0, 2], [2, 1]]) # (3, 8)

选取特定行

print(“特定行 (行0, 行2):\n”, arr[[0, 2]])
“`

3.4 数组运算

NumPy数组的一大优势是其矢量化运算能力,即对整个数组进行操作,而无需显式编写循环。

3.4.1 元素级运算

对数组执行数学运算(加、减、乘、除等)时,这些操作会按元素逐个应用。

“`python
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

加法

print(“arr1 + arr2:”, arr1 + arr2) # [5 7 9]

乘法 (元素级乘法)

print(“arr1 * arr2:”, arr1 * arr2) # [4 10 18]

标量乘法

print(“arr1 * 2:”, arr1 * 2) # [2 4 6]

各种数学函数

print(“sin(arr1):”, np.sin(arr1))
print(“sqrt(arr2):”, np.sqrt(arr2))
“`

3.4.2 矩阵乘法

对于矩阵乘法,需要使用@运算符或np.dot()函数。

“`python
import numpy as np

matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

矩阵乘法

matrix_product = matrix1 @ matrix2
print(“\n矩阵乘法:\n”, matrix_product)

结果:

[[15 + 27, 16 + 28],

[35 + 47, 36 + 48]]

[[19, 22],

[43, 50]]

使用np.dot()

dot_product = np.dot(matrix1, matrix2)
print(“\nnp.dot() 矩阵乘法:\n”, dot_product)
“`

3.4.3 聚合函数

NumPy提供了许多用于计算数组统计值的函数,如sum()mean()max()min()等。这些函数可以作用于整个数组,也可以沿着特定轴(行或列)进行。

“`python
import numpy as np

arr = np.array([[1, 2, 3],
[4, 5, 6]])

整个数组的和

print(“所有元素的和:”, arr.sum())

整个数组的平均值

print(“所有元素的平均值:”, arr.mean())

沿列求和 (axis=0)

print(“沿列求和:”, arr.sum(axis=0)) # [5 7 9] (1+4, 2+5, 3+6)

沿行求和 (axis=1)

print(“沿行求和:”, arr.sum(axis=1)) # [6 15] (1+2+3, 4+5+6)

沿列找最大值

print(“沿列最大值:”, arr.max(axis=0))
“`

3.5 广播 (Broadcasting)

广播是NumPy中一项非常强大的功能,它允许不同形状的数组在特定规则下进行元素级运算,而无需显式地复制数据以使它们的形状匹配。

广播的规则:
1. 如果两个数组的维度数不相同,那么维度较小的数组的形状会在其前面填充1,直到维度数相同。
2. 在任何维度上,如果两个数组的长度相同,或者其中一个数组的长度为1,那么它们在该维度上是兼容的。
3. 如果两个数组在任何维度上都不兼容,将引发错误。

“`python
import numpy as np

a = np.array([[1, 2, 3],
[4, 5, 6]]) # 形状 (2, 3)

b = np.array([10, 20, 30]) # 形状 (3,)

b会被广播成 [[10, 20, 30],

[10, 20, 30]]

result = a + b
print(“广播示例 a + b:\n”, result)

结果:

[[11 22 33]

[14 25 36]]

c = np.array([[100],
[200]]) # 形状 (2, 1)

c会被广播成 [[100, 100, 100],

[200, 200, 200]]

result2 = a + c
print(“\n广播示例 a + c:\n”, result2)

结果:

[[101 102 103]

[204 205 206]]

“`

4. 总结

NumPy是Python进行科学计算的基石。通过其高效的ndarray对象和丰富的函数集,它为数据操作、数学运算和统计分析提供了强大的支持。掌握NumPy的安装和基本使用是进入Python数据科学领域的第一步,也是至关重要的一步。从简单的数组创建到复杂的索引、切片和广播,NumPy提供了一套直观而强大的工具集,能够显著提高您的数据处理效率。


滚动至顶部