从 Matlab 到 Numpy 的矩阵乘法转换



我正在尝试将一些数组相乘,但似乎无法弄清楚该怎么做。我正在翻译来自 MatLab 的一些线性代数代码,但由于 Matlab 使用列主要索引和 Python 使用行主要索引,因此似乎无法让它在 Numpy 中正常工作。

我已经设法让矩阵相乘,但我没有得到与 Matlab 中相同的结果。

我有三个数组:

a.shape = 40x40 in Python, 40x40 in Matlab, zeroes array
b.shape = 40x21 in Python, 21x40 in Matlab, array with < 1 float values
c.shape = 31x40 in Python, 40x31 in Matlab, array with < 1 float values

我试图从 Matlab 复制的数学是:

    D = b*(a*c);
    disp(size(D));  % Size of D is 21x31

当我尝试对 NumPy 做同样的事情时:

D = b @ (a @ c)

它显然不起作用,因为 c 是 31x40 并且不能与 A (40x40( 相乘。

我已经设法通过使用以下命令使乘法实际工作:

D = np.transpose(np.transpose(b) @ (a @ np.transpose(c)))

但是 Numpy 中生成的 D 与 Matlab 中的 D 不同,尽管尺寸正确 (31x21(。

如果有人有任何想法如何做到这一点,或者即使不可能,请告诉我!

>不,只需用随机数运行它差异仅限于舍入误差

检查正确矩阵大小的快速简单示例:

import numpy as np
np.__version__ 
#'1.16.3'
a = np.ones([40,40])
b = np.ones([21,40])
c = np.ones([40,31])
#%%
a_mult_c = a @ c
a_mult_c.shape()
# (40, 31)
#%%
D = b @ a_mult_c
D.shape
# (21, 31)

有关详细的随机数示例,加载并运行这些数字

https://jsonblob.com/c240c380-81a2-11e9-8287-ef9cd282f8ed

假设您复制,粘贴并将其保存到"matrixmult.json"矩阵实验室:

fid = fopen('matrixmult.json', 'r');
values = jsondecode(fread(fid, '*char')'));
fclose(fid);

蟒:

import numpy as np
np.__version__ 
# '1.16.3' 
import json
with open('matrixmult.json', 'r') as f:  # py > 3.6
    values = json.load(f)
a = np.asarray(values['a'])
b = np.asarray(values['b'])
c = np.asarray(values['c'])
D = b @ (a @ c)
D == np.asarray(values['D'])

相关内容

  • 没有找到相关文章

最新更新