如何从两个数组中所有元素的乘积创建矩阵?

Posted

技术标签:

【中文标题】如何从两个数组中所有元素的乘积创建矩阵?【英文标题】:How to create a matrix from product of all elements in two arrays? 【发布时间】:2019-05-21 11:55:08 【问题描述】:

我正在阅读 documentation for matlab 关于元素乘法,我遇到了这个例子:

创建一个行向量 a 和一个列向量 b,然后将它们相乘。这 1×3 行向量和 6×1 列向量组合生成 6×3 所有元素组合相乘的矩阵。

文档确实显示了输出,但他们是如何得到 size6,3 的输出矩阵的?这是通过使用文档中解释的方法将大小为6,1 的列向量b 和大小为1,3 的行向量a 相乘获得的。

【问题讨论】:

【参考方案1】:

这称为广播。当一个维度为1,而另一个更大时,扩大单位维度,就像repmat

 6 1 : column
 1 3 : row
 ------
 6 3 : result

给定

a = 1:3
b = [1:6]'
a .* b

大致相当于

a2 = repmat(a, 6, 1)
b2 = repmat(b, 1, 3)
a2 .* b2

当然,广播的内存效率要高得多。

【讨论】:

感谢您的提醒。我从 Matlab 中休息了很长时间(> 5 年),才重新开始使用它。修正了答案。 他们可能会称之为implicit expansion;无论如何,它也适用于像 NumPy 的广播功能这样的加/分钟

以上是关于如何从两个数组中所有元素的乘积创建矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 numpy 中获得逐元素矩阵乘法(Hadamard 乘积)?

PyTorch 向量/矩阵/张量的元素乘积

矩阵乘积

怎样用matlab求矩阵的乘积

[HNOI2001]矩阵乘积

3d 数组的 Numpy 元素乘积