python基础之Numpy三

138 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 倍。