如何用NumPy将一维数组a[k]与d[j]相乘得到矩阵m[j,k]
解决方案:生成指定形状的乘积矩阵
嘿,这个需求其实用NumPy的内置机制或者函数就能轻松实现,我给你几种简洁高效的方法:
方法1:利用NumPy广播机制(最推荐)
NumPy的广播会自动帮我们扩展数组维度,让形状兼容的数组可以进行元素级运算。我们只需要把d转换成列向量,再和a相乘即可:
import numpy as np a = np.array([a1,a2,a3,a4,a5]) d = np.array([d1,d2,d3]) # 将d从(3,)转换为(3,1)的列向量,再与a相乘 m = d[:, np.newaxis] * a print(m.shape) # 输出 (3, 5)
解释:d[:, np.newaxis]把一维数组d变成了3行1列的二维数组,此时它和一维数组a(会被自动扩展为3行5列)进行元素级乘法,正好得到你想要的3行5列矩阵。
方法2:使用外积函数np.outer
NumPy的np.outer()函数专门用来计算两个一维数组的外积,结果正好是你需要的形状:
m = np.outer(d, a) print(m.shape) # 输出 (3, 5)
这个方法最直接,外积的定义就是让第一个数组的每个元素和第二个数组的每个元素相乘,生成的矩阵行数等于第一个数组长度,列数等于第二个数组长度,完美匹配你的需求。
方法3:手动扩展维度(适合理解原理)
如果你想手动控制数组的扩展过程,可以用np.tile()来重复数组维度,再相乘:
# 把d变成3行1列,然后重复5次列 d_expanded = np.tile(d.reshape(3, 1), (1, 5)) # 把a变成1行5列,然后重复3次行 a_expanded = np.tile(a.reshape(1, 5), (3, 1)) # 元素级相乘 m = d_expanded * a_expanded
不过这种方法不如前两种高效,因为会额外复制数组数据,日常使用更推荐前两种方法。
内容的提问来源于stack exchange,提问作者A. Vieira
相关产品推荐
相关产品推荐

