Python 框架 numpy 学习笔记,你是否掌握了这些重要概念?
Python 是一门非常强大的编程语言,在科学计算领域中应用广泛,而 NumPy 作为其重要的数据处理库,在科学计算中也扮演了重要的角色。本篇文章将会介绍 NumPy 中的一些重要概念,以及如何使用这些概念来进行数据处理和分析。
- NumPy 的基本概念
NumPy 是一个 Python 库,用于处理大型多维数组和矩阵,其核心是 ndarray 数据结构。ndarray 是一个 N 维数组对象,由同类数据类型的元素组成,每个元素在内存中占用相同的字节大小。
我们可以使用 NumPy 创建 ndarray 对象,例如:
import numpy as np
a = np.array([1, 2, 3])
print(a)
这里我们使用 np.array()
函数创建了一个一维数组,输出结果为 [1 2 3]
。我们也可以使用 np.arange()
函数来创建一个等差数列:
b = np.arange(10)
print(b)
这里我们创建了一个长度为 10 的一维数组,输出结果为 [0 1 2 3 4 5 6 7 8 9]
。除此之外,我们还可以使用 np.zeros()
和 np.ones()
函数来创建一个元素全为 0 或者全为 1 的数组,例如:
c = np.zeros((3, 3))
print(c)
d = np.ones((2, 2))
print(d)
这里我们创建了一个 3x3 的零数组和一个 2x2 的全为 1 的数组。
- NumPy 的数组操作
NumPy 提供了多种对数组进行操作的函数和方法,例如数组的切片、索引、拼接和重塑等。我们可以使用 []
运算符来访问数组中的元素,例如:
a = np.array([1, 2, 3])
print(a[0])
这里输出结果为 1
,表示访问数组中的第一个元素。我们也可以使用切片来获取数组的子集,例如:
b = np.arange(10)
print(b[2:5])
这里输出结果为 [2 3 4]
,表示获取数组中下标为 2 到下标为 4 的元素。我们还可以使用 np.concatenate()
函数来进行数组的拼接,例如:
c = np.array([[1, 2], [3, 4]])
d = np.array([[5, 6], [7, 8]])
e = np.concatenate((c, d), axis=0)
print(e)
这里我们将两个 2x2 的数组沿着第一个维度进行拼接,输出结果为:
[[1 2]
[3 4]
[5 6]
[7 8]]
除此之外,我们还可以使用 np.reshape()
函数来重塑数组的形状,例如:
f = np.arange(12)
g = f.reshape((3, 4))
print(g)
这里我们将一个长度为 12 的一维数组重塑为一个 3x4 的二维数组,输出结果为:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
- NumPy 的数学函数
NumPy 提供了多种数学函数,例如对数函数、三角函数、指数函数等。这些函数可以接受一个或多个数组作为参数,并返回一个新的数组作为结果。我们可以使用 np.log()
函数来计算数组的对数,例如:
a = np.array([1, 2, 3])
b = np.log(a)
print(b)
这里我们对数组 [1 2 3]
中的每个元素取对数,输出结果为 [0. 0.69314718 1.09861229]
。我们也可以使用 np.sin()
和 np.cos()
函数来计算数组中每个元素的正弦和余弦值,例如:
c = np.array([0, np.pi/2, np.pi])
d = np.sin(c)
e = np.cos(c)
print(d)
print(e)
这里我们计算了数组 [0 π/2 π]
中每个元素的正弦和余弦值,输出结果为:
[0.0000000e+00 1.0000000e+00 1.2246468e-16]
[ 1.000000e+00 6.123234e-17 -1.000000e+00]
除此之外,NumPy 还提供了许多其他的数学函数,例如 np.exp()
函数用于计算数组中每个元素的指数值,np.sqrt()
函数用于计算数组中每个元素的平方根等。
- NumPy 的广播
广播是 NumPy 中一种非常强大的机制,它能够使得不同形状的数组在进行算术运算时表现得像同样的形状。具体来说,NumPy 在运算两个数组时,会自动对这两个数组进行广播,使得它们的形状相同后再进行运算。
例如,我们可以对一个 2x2 的数组和一个 1x2 的数组进行加法运算,如下所示:
a = np.array([[1, 2], [3, 4]])
b = np.array([1, 2])
c = a + b
print(c)
这里我们将数组 b
广播为一个 2x2 的数组,然后对两个数组进行加法运算,输出结果为:
[[2 4]
[4 6]]
除了加法之外,广播还可以用于其他算术运算、比较运算和逻辑运算等。
- NumPy 的随机函数
NumPy 还提供了多种随机函数,用于生成随机数和随机数组。这些函数可以用于模拟随机事件,生成随机数据等。我们可以使用 np.random.rand()
函数来生成一个指定形状的随机数组,例如:
a = np.random.rand(3, 2)
print(a)
这里我们生成了一个 3x2 的随机数组,输出结果类似于:
[[0.87772416 0.47430328]
[0.40774962 0.29963571]
[0.22040671 0.72272882]]
除此之外,NumPy 还提供了其他的随机函数,例如 np.random.randn()
函数用于生成服从正态分布的随机数,np.random.randint()
函数用于生成指定范围内的随机整数等。
- NumPy 的线性代数函数
NumPy 还提供了多种线性代数函数,用于进行矩阵计算和矩阵分解等。这些函数可以用于求解线性方程组、计算矩阵的特征值和特征向量等。我们可以使用 np.linalg.inv()
函数来求解一个矩阵的逆矩阵,例如:
a = np.array([[1, 2], [3, 4]])
b = np.linalg.inv(a)
print(b)
这里我们求解了一个 2x2 的矩阵的逆矩阵,输出结果为:
[[-2. 1. ]
[ 1.5 -0.5]]
除此之外,NumPy 还提供了其他的线性代数函数,例如 np.linalg.det()
函数用于计算矩阵的行列式,np.linalg.eig()
函数用于计算矩阵的特征值和特征向量等。
本文介绍了 NumPy 中的一些重要概念,包括数组的创建、数组的操作、数学函数、广播、随机函数和线性代数函数等。希望本文能够帮助读者更好地掌握 NumPy 的使用方法,从而在科学计算中发挥更大的作用。