NumPy Tutorials

NumPy:高效掌握算术运算与广播机制

Spread the love

NumPy是Python数值计算的基石库,提供强大的工具用于高效的数组操作。本教程深入探讨两个基本概念:算术运算和广播,它们对于编写简洁高效的数值代码至关重要。

目录

  1. 算术运算
  2. 广播

1. 算术运算

NumPy将Python的算术运算符(+,-,*,/,//,%,**)无缝扩展到直接对NumPy数组进行操作。这些运算按元素进行,这意味着它们应用于数组中对应的元素。让我们用例子来说明:


import numpy as np

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

print("加法:", arr1 + arr2)       # 输出:[ 6  8 10 12]
print("减法:", arr1 - arr2)    # 输出:[-4 -4 -4 -4]
print("乘法:", arr1 * arr2) # 输出:[ 5 12 21 32]
print("除法:", arr1 / arr2)      # 输出:[0.2        0.33333333 0.42857143 0.5       ]
print("向下取整除法:", arr1 // arr2) # 输出:[0 0 0 0]
print("取模:", arr1 % arr2)        # 输出:[1 2 3 4]
print("幂运算:", arr1 ** arr2) # 输出:[    1    64  2187 65536]

这种按元素的操作可以轻松扩展到多维数组。

2. 广播

广播是NumPy的一个强大功能,它允许在不同形状的数组之间进行运算,前提是满足特定条件。它消除了显式循环的需要,从而显著提高了性能。广播的核心规则是:

  1. 规则1:如果数组的维度不相等,则较小数组的形状前面会添加前导1,直到它与较大数组的维度匹配。
  2. 规则2:如果一个数组的维度大小为1,而另一个数组的维度大于1,则大小为1的维度将被拉伸以匹配较大的维度。
  3. 规则3:如果数组的维度不同,并且两者的大小都不为1,则会引发ValueError

让我们演示广播:


import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])

result = arr1 + arr2  # 广播生效

print(result)
# 输出:
# [[11 22 33]
# [14 25 36]]

在这里,arr2(形状(3,))被广播以匹配arr1的形状(2, 3)。arr1的每一行都与arr2相加,避免了显式循环。掌握广播对于编写高效且可读的NumPy代码至关重要。始终仔细考虑数组形状以避免意外结果或错误。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注