0Pricing
Pandas & NumPy Academy · 课时

逐元素算术运算

逐元素对数组进行加、减、乘、除运算,并理解 NumPy 如何避免显式编写 Python 循环。

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

Python 循环的问题

使用纯 Python 将列表相加需要运行缓慢的循环,而 NumPy 会改用快速的 C 来完成,通常快 10 到 100 倍。这种技巧称为向量化。⚡

# Python list approach -- slow
a = [1, 2, 3, 4]
b = [10, 20, 30, 40]
result = [x + y for x, y in zip(a, b)]
print(result)  # [11, 22, 33, 44]

# NumPy approach -- fast
import numpy as np
na, nb = np.array(a), np.array(b)
print(na + nb)  # [11 22 33 44]

加法和减法

对于形状相同的数组,+ 和 - 运算符会逐元素运行,在一次快速遍历中将对应位置配对计算。

import numpy as np

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

print(a + b)   # [11 22 33]
print(a - b)   # [ 9 18 27]

乘法和除法

使用 * 和 / 进行逐元素的乘法和除法——请注意,* 不是矩阵乘法。除法始终返回浮点数,即使输入的是整数。

import numpy as np

a = np.array([10, 20, 30])
b = np.array([2, 4, 5])

print(a * b)    # [ 20  80 150]
print(a / b)    # [5.  5.  6.]
print(a // b)   # [5 5 6]
print(a % b)    # [0 0 0]

标量运算(广播预览)

将一个数字加到数组上时,NumPy 会将它应用到每个元素。这就是最简单形式的广播,非常适合平移或缩放数据。

import numpy as np

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

print(a + 10)   # [11 12 13 14 15]
print(a * 2)    # [ 2  4  6  8 10]
print(a ** 2)   # [ 1  4  9 16 25]
print(a / 10)   # [0.1 0.2 0.3 0.4 0.5]

幂运算和平方根

使用 ** 将每个元素提升到指定次幂。计算平方根时,请使用 np.sqrt 这个通用函数;它由 C 实现,比在 Python 中循环更快。

import numpy as np

a = np.array([1.0, 4.0, 9.0, 16.0])
print(a ** 0.5)       # [1. 2. 3. 4.]
print(np.sqrt(a))     # [1. 2. 3. 4.]
print(a ** 2)         # [  1.  16.  81. 256.]

比较运算符返回布尔数组

使用 >、== 或 < 将数组进行比较,会得到一个由 True/False 值组成的布尔数组,这是筛选数据的基础。

import numpy as np

a = np.array([3, 7, 2, 9, 1])
print(a > 4)    # [False  True False  True False]
print(a == 2)   # [False False  True False False]
print(a >= 3)   # [ True  True False  True False]

对布尔数组使用逻辑运算符

要组合布尔数组,请使用 &、| 和 ~ 符号,而不是 and、or、not 这些单词。将每个条件放在括号中,以避免运算优先级带来的意外结果。

import numpy as np

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

使用 += 进行原地运算

+= 等运算符会直接修改数组,通过跳过新副本来节省内存。但请确保 dtype 兼容——不能用这种方式将 0.5 加到整数数组上。

import numpy as np

a = np.array([1.0, 2.0, 3.0])
a += 10.0
print(a)   # [11. 12. 13.]
a *= 2.0
print(a)   # [22. 24. 26.]

二维数组运算

逐元素运算在二维数组上的工作方式相同:将两个形状匹配的矩阵相加时,每个单元格都会与对应位置的单元格相加。不需要嵌套循环。

import numpy as np

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

print(A + B)
# [[ 6  8]
#  [10 12]]

print(A * B)  # element-wise, NOT matrix multiply
# [[ 5 12]
#  [21 32]]

混合运算中的 dtype 提升

混合两种 dtype 时,NumPy 会将它们都提升为更安全的类型,从而避免信息丢失——整数加浮点数会得到浮点数。请注意,这可能会悄悄增加内存占用。

import numpy as np

a = np.array([1, 2, 3], dtype=np.int32)
b = np.array([0.5, 1.5, 2.5], dtype=np.float64)

c = a + b
print(c)        # [1.5 3.5 5.5]
print(c.dtype)  # float64

绝对值和符号

使用 np.abs 计算绝对值,使用 np.sign 为每个元素得到 -1、0 或 +1。二者都是快速的通用函数,常用于损失函数和归一化步骤。

import numpy as np

a = np.array([-3, 0, 4, -7, 2])
print(np.abs(a))    # [3 0 4 7 2]
print(np.sign(a))   # [-1  0  1 -1  1]

快速检查

检验您对本课 NumPy 逐元素运算内容的理解。

课程回顾

您已经掌握了!NumPy 无需循环即可进行逐元素运算,标量会广播到整个数组,比较运算会得到布尔数组。下一步学习切片和索引。

常见问题解答

「逐元素算术运算」课时是免费的吗?

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

「逐元素算术运算」这节课中我会学到什么?

逐元素对数组进行加、减、乘、除运算,并理解 NumPy 如何避免显式编写 Python 循环。 你通过在浏览器中直接运行的动手代码来练习 Pandas & NumPy Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Pandas & NumPy Academy 需要有经验吗?

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

「逐元素算术运算」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 创建 NumPy 数组
  2. 数组属性与检查
  3. 逐元素算术运算
  4. 数组切片与索引
← 返回 Pandas & NumPy Academy