持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
NumPy 是 Python 中科学计算的基础包。它是一个 Python 库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。
#4D 阵列
看了之前的几篇文章的例子,我们再在这个里看这样一个模型。n 维数组是 n-1 维数组的集合,对于 n > 0的情况,希望你现在对多维数组的可视化有了更好的了解。
访问数组元素
访问数组元素就像 Python 列表一样,NumPy 数组中的索引以 0 开头。
import numpy as np
vec = np.array([-3, 4, 6, 9, 8, 3])
print(vec[3])
vec[3] = 19
print(vec[3])
mat = np.array([
[2, 4, 6, 8],
[10, 12, 14, 16]
])
print(mat[0])
print(mat[1, 0])
print(mat[-1, -1])
输出:
9
19
[2 4 6 8]
10
16
当然NumPy 数组也是支持切片的:
print(vec[1:4])
print(mat[0, 0:3])
print(mat[:, 1])
#输出:
[4 6 9]
[2 4 6]
[ 4 12]
在最后一个示例中,[:, 1]说“从所有行中获取第二个值”。因此,我们得到矩阵的第二列作为输出。
示例:4D 数组中的索引
4D 数组中的索引
假设我们要访问带圆圈的值。它位于第 2 个 3D 数组的最后一个矩阵的第 2 行第 2 列。这很多,所以慢慢来。
以下是访问它的方法:
arr[2, -1, 1, 1]
Python 与 NumPy
在文章的开头,我说过 NumPy 中的计算与普通的 Python 代码相比非常快。让我们看看有什么不同。
我们将创建两个列表,其中包含从 0 到 9,999,999 的 1000 万个数字,按元素添加它们并测量所花费的时间。我们将两个列表都转换为 NumPy 数组并执行相同的操作。
import numpy as np
import time
l1 = list(range(10000000))
l2 = list(range(10000000))
sum = []
then = time.time()
for i in range(len(l1)):
sum.append(l1[i] + l2[i])
print(f"With just Python: {time.time() - then: .2f}s")
arr1 = np.array(l1)
arr2 = np.array(l2)
then = time.time()
sum = arr1 + arr2
print(f"With NumPy: {time.time() - then: .2f}s")
输出:
With just Python: 2.30s
With NumPy: 0.14s
在这种情况下,NumPy 比原始 Python 快 16 倍。