0Pricing
Python Academy · 课时

数组运算与广播

执行向量化算术运算,并了解广播规则。

数组运算与广播 是 CoddyKit 上的免费 Python Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

向量化算术运算

NumPy 会对整个数组逐元素执行算术运算,无需使用 Python 循环;这些运算在经过优化的 C 代码中执行。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)    # [5 7 9]
print(a * b)    # [4 10 18]
print(a ** 2)   # [1 4 9]

通用函数(ufunc)

NumPy 的 ufunc 会逐元素应用 C 层函数:np.sqrt、np.exp、np.log、np.sin 等。

import numpy as np

x = np.linspace(0, np.pi, 5)
print(np.sin(x))   # [0. 0.707 1. 0.707 0.]
print(np.exp([1.0, 2.0, 3.0]))   # [2.718 7.389 20.086]

归约运算

使用 np.sum、np.mean、np.max、np.min 和 np.std,将数组归约为标量(或更低维的数组)。

import numpy as np

m = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(m))          # 21
print(np.sum(m, axis=0))  # [5 7 9]  — sum each column
print(np.sum(m, axis=1))  # [6 15]   — sum each row

广播规则

广播会扩展较小的数组,使其与较大的数组匹配,而无需复制数据。规则是:从右侧对齐维度,并扩展大小为 1 的维度。

import numpy as np

a = np.array([[1], [2], [3]])  # shape (3,1)
b = np.array([10, 20, 30])     # shape (3,)

print(a + b)
# [[11 21 31]
#  [12 22 32]
#  [13 23 33]]

标量运算的广播

标量会广播到数组的所有元素。

import numpy as np

arr = np.arange(6).reshape(2, 3)
print(arr + 10)
# [[10 11 12]
#  [13 14 15]]
print(arr * 0.5)
# [[0.  0.5 1. ]
#  [1.5 2.  2.5]]

比较和布尔运算

比较运算会生成布尔数组。请使用 &、| 和 ~ 进行组合,而不要使用 Python 的 and/or/not。

import numpy as np

arr = np.array([1, 5, 3, 8, 2])
print(arr > 3)           # [False  True False  True False]
print(arr[(arr > 2) & (arr < 7)])  # [5 3]

where()

np.where(condition, x, y) 在条件为 True 的位置返回 x 中的元素,在条件为 False 的位置返回 y 中的元素。

import numpy as np

arr = np.array([-2, 3, -1, 4, 0])
result = np.where(arr >= 0, arr, 0)  # clip negatives to 0
print(result)   # [0 3 0 4 0]

沿轴进行聚合

指定 axis=,即可沿多维数组的特定维度进行归约。

import numpy as np

data = np.arange(12).reshape(3, 4)
print(data.mean(axis=0))   # mean of each column → shape (4,)
print(data.mean(axis=1))   # mean of each row → shape (3,)

cumsum 和 diff

np.cumsum 计算累积和;np.diff 计算相邻元素之间的差值。

import numpy as np

prices = np.array([100, 110, 105, 115])
print(np.cumsum(prices))          # [100 210 315 430]
print(np.diff(prices))            # [10 -5 10] (daily changes)

向量化字符串运算

np.char 为字符串数组提供向量化字符串运算。

import numpy as np

words = np.array(["apple", "banana", "cherry"])
print(np.char.upper(words))       # ['APPLE' 'BANANA' 'CHERRY']
print(np.char.startswith(words, "a"))  # [True False False]

与 Python 列表的性能比较

对于数值运算,NumPy 比功能等效的 Python 循环快 10 到 100 倍,因为它在 C 中执行,不会产生 Python 解释器的开销。

import numpy as np, time

n = 1_000_000

start = time.perf_counter()
python_sum = sum(i**2 for i in range(n))
print(f"Python: {time.perf_counter()-start:.3f}s")

arr = np.arange(n)
start = time.perf_counter()
numpy_sum = (arr**2).sum()
print(f"NumPy:  {time.perf_counter()-start:.3f}s")

快速检查

将形状为 (3,1) 的数组与形状为 (3,) 的数组相加时,结果的形状是什么?

回顾

NumPy 运算会在 C 中逐元素执行(无需 Python 循环)。广播会在不复制数据的情况下扩展兼容的形状。使用 axis= 沿特定维度进行归约。ufunc(如 np.sin 和 np.exp)会以 C 的速度逐元素执行运算。

常见问题解答

「数组运算与广播」课时是免费的吗?

是的 — 「数组运算与广播」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「数组运算与广播」这节课中我会学到什么?

执行向量化算术运算,并了解广播规则。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「数组运算与广播」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. NumPy 数组与 dtypes
  2. 数组运算与广播
  3. 索引、切片与高级索引
  4. 使用 NumPy 进行线性代数
← 返回 Python Academy