You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将二维NumPy数组与一维数组相乘得到三维数组?

更简便的实现方法:利用NumPy广播机制

嘿,其实你完全不用动用np.einsum,NumPy的广播机制就能完美解决这个需求,代码更简洁直观,而且效率也很高!

先回顾下你的输入:

import numpy as np

A = np.array([[1, 2],[3, 4]])
B = np.array([10, 100])

方法1:用索引扩展维度 + 广播(最推荐)

只需要给A增加一个末尾的维度,然后直接和B相乘就行:

C = A[..., None] * B

验证结果:

print(C[:, :, 0])
# 输出:
# [[10 20]
#  [30 40]]

print(C[:, :, 1])
# 输出:
# [[100 200]
#  [300 400]]

原理:A[..., None]把原本形状为(2,2)的A变成(2,2,1),而B的形状是(2,)。NumPy的广播机制会自动把B扩展为(1,1,2)的形状,让两个数组的维度完全匹配,然后逐元素相乘,最终得到你想要的(2,2,2)三维数组C。

方法2:用np.expand_dims显式扩展维度

和方法1本质一样,只是写法更明确:

C = np.expand_dims(A, axis=-1) * B

方法3:用np.multiply.outer

如果你喜欢用现成的函数,multiply.outer也能直接生成目标数组:

C = np.multiply.outer(A, B)

这个函数会直接计算A中每个元素和B中每个元素的乘积,生成的形状正好是(2,2,2),完全符合你的需求。

这些方法都比np.einsum更轻量易读,而且广播机制是NumPy的核心特性,日常处理这类维度扩展的需求非常好用~

内容的提问来源于stack exchange,提问作者math

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:19:20