MATLAB vs Numpy 乘法问题



我正在尝试在Python/Numpy中获取以下MATLAB结果。

MATLAB 代码:

A = reshape(ones(1, 12), 3,1,4);
B = reshape(ones(3, 1));
size(A .* B) % ans = 3     1     4

数字代码:

A = np.ones(12).reshape((3,1,4))
B = np.ones(3).reshape((3,1))
(A * B).shape # (3, 3, 4)

问题:

如何更改 Numpy 代码以获得类似于 MATLAB 的结果?

在 MATLAB 中,最后一个维度是外部维度。 显然,(3,1(向该方向扩展以匹配另一个方向的(3,1,4(。

numpy中,前导维度是外部维度。 (3,1( 广播到 (1,3,1(,并与 (3,1,4( 一起扩展为联合 (3,3,4(。

要向另一个方向扩展,您需要明确,b[:,:,np.newaxis]). 现在,您有一个 (3,1,1( 与 (3,1,4( 一起广播。

作为历史注释,MATLAB 最初是严格的 2d,在 Fortran 中,列主要形式。 在 3.5 版左右,他们允许更高的维度,尽管我相信一种捏造的方式(将最后一个维度映射到第二个维度(。 它很容易添加或收缩这些最后的维度。 广播numpy感是一个更新的补充,但具有 MATLAB 特定的规则。

最新更新