如何无循环实现3D数组与2D数组的指定元素相乘?
无循环实现numpy数组对应维度逐元素相乘
你的需求可以通过numpy广播机制直接实现,完全不需要循环。
问题核心
x形状为(3, 4, 3),可看作3个(4, 3)的二维数组y形状为(3, 3),对应3个(3,)的一维数组- 要让每个
x[i]和y[i]逐元素相乘,只需调整y的维度使其与x匹配,触发广播即可
无循环实现代码
import numpy as np x = np.arange(36).reshape((3,4,3)) y = np.arange(9).reshape(3,3) # 调整y的形状为(3,1,3),与x的维度对齐后直接相乘 result = x * y[:, np.newaxis, :] # 验证和循环结果一致 loop_result = np.array([xs * ys for xs, ys in zip(x, y)]) print(np.array_equal(result, loop_result)) # 输出 True
原理说明
y[:, np.newaxis, :]将y的形状从(3,3)转换为(3,1,3)- numpy广播会自动把
y中长度为1的维度扩展到和x对应维度相同的长度(这里是4),相当于每个y[i]被自动扩展为(4,3)形状,随后和x[i]逐元素相乘,逻辑和循环完全一致
内容的提问来源于stack exchange,提问作者Melanie
相关产品推荐
相关产品推荐

