如何将小numpy数组的行稀疏添加到大numpy数组的指定行?
解决方法:利用Numpy高级索引实现批量行加法
这事儿根本用不着np.apply_along_axis,Numpy本身的索引机制就能完美解决,而且效率高得多。
核心实现代码
只需要几行就能完成需求:
import numpy as np # 定义示例数组 A = np.array([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) B = np.array([[1, 3, 2, 4], [6, 2, 5, 1], [2, 8, 1, 4]]) Index = np.array([1, 4, 5]) # 若不想修改原数组A,先复制一份;允许修改的话直接操作A即可 result = A.copy() result[Index] += B # 输出结果 print(result)
原理说明
- Numpy支持用整数数组作为索引,
result[Index]会直接取出A中索引为1、4、5的三行,形成一个和B形状完全一致的子数组。 - 执行
+= B时,Numpy会自动将B的每一行和result[Index]对应的行逐元素相加,精准匹配你要的对应关系。
为什么放弃np.apply_along_axis?
- 这个函数本质是逐行遍历,面对大型数组时,速度比向量化操作慢几个数量级。
- 你提到的两个痛点:跳过不需要处理的行、匹配B的对应行,用索引方法完全不存在——直接精准定位目标行,和B的行一一对应,根本不需要遍历整个A。
内容的提问来源于stack exchange,提问作者E. V. Hadzen
相关产品推荐
相关产品推荐

