如何用NumPy无循环实现二维数组与一维数组逐元素相乘得三维数组
NumPy数组广播实现二维数组与一维数组的逐元素相乘生成三维数组
核心思路是利用NumPy广播机制,无需循环即可完成向量化运算,直接生成目标三维数组。
实现代码
import numpy as np # 定义原始数组 A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) B = np.array([1, 2, 3, 4]) # 方法1:通过np.newaxis为B增加维度,实现广播相乘 C = B[:, np.newaxis, np.newaxis] * A # 方法2:用reshape调整B的形状,效果相同 # C = B.reshape(-1, 1, 1) * A # 验证结果 print(C)
原理说明
- 原始数组形状:A是
(3,3),B是(4,) - 通过
[:, np.newaxis, np.newaxis]或reshape(-1,1,1),将B的形状转为(4,1,1) - NumPy广播会自动将B的每个元素扩展为与A同形状的
(3,3)数组,然后对应位置元素相乘,最终得到形状为(4,3,3)的三维数组C,完全符合预期格式。
这种方式是纯向量化运算,依赖NumPy底层的C优化,运算效率远高于Python循环。
内容的提问来源于stack exchange,提问作者shmrnm
相关产品推荐
相关产品推荐

