如何高性能实现numpy二维数组与另一数组的逐元素相加
最优实现方案
直接利用NumPy原生广播机制执行加法即可,代码如下:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) b = np.array([[1,5,10]]) result = a + b
运行后输出的结果和需求完全匹配:array([[ 2, 7, 13], [ 5, 10, 16]])
性能优势说明
这个方案是所有可行实现里性能最优的,原因如下:
- 所有计算逻辑完全在NumPy底层C语言层面执行,没有Python层的循环开销,运算速度最快
- 广播机制不会实际将b数组复制为和a同维度的新数组,仅在计算时做虚拟维度扩展,几乎没有额外内存开销
- 不需要调用
repeat、tile等会生成新数组的接口,避免了不必要的内存分配和拷贝成本,当a的行数越大时,性能优势越明显。类似np.tile(b, (a.shape[0], 1)) + a的实现会额外生成和a同大小的中间数组,内存和时间开销都会高不少,不推荐。
内容的提问来源于stack exchange,提问作者user4603876
相关产品推荐
相关产品推荐

