python - 从 Matlab 到 Numpy 的矩阵乘法转换

标签 python python-3.x matlab numpy linear-algebra

我正在尝试将一些数组相乘,但似乎不知道该怎么做。我正在从 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” MATLAB:

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

python :

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'])

关于python - 从 Matlab 到 Numpy 的矩阵乘法转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350814/

相关文章:

python - 在 jinja2 中使用 django 过滤器

python - Lua/Python 中的持久套接字连接

Python 3 将包含字母的字符串中的数字总数相加

matlab - 替换字符串中的几个不同字符

matlab - 中轴骨架图

python - 在 python 中使用 Selenium、PhantomJS 和 Tor

Python JPEG 转电影

python - Bokeh:动态更新垂直线的位置。

python - 如何在 Python 中构造具有多个特征的元素

matlab - 修改x轴位置