MATLAB和NUMPY(?)中产生不同值的矩阵乘法
这是矩阵MATLAB和NUMPY(?)中产生不同值的矩阵乘法,matlab,numpy,matrix-multiplication,Matlab,Numpy,Matrix Multiplication,这是矩阵 >> x = [2 7 5 9 2; 8 3 1 6 10; 4 7 3 10 1; 6 7 10 1 8;2 8 2 5 9] Matlab给了我 >> mtimes(x',x) ans = 124 124 94 122 154 124 220 145 198 179 94 145 139 101 121 122 198 101 243 141 154 1
>> x = [2 7 5 9 2; 8 3 1 6 10; 4 7 3 10 1; 6 7 10 1 8;2 8 2 5 9]
Matlab给了我
>> mtimes(x',x)
ans =
124 124 94 122 154
124 220 145 198 179
94 145 139 101 121
122 198 101 243 141
154 179 121 141 250
但是,python(numpy)中的相同操作(对相同数据)会产生不同的结果。我不明白为什么
import numpy as np
a = [[2, 7, 5, 9, 2],[8,3,1,6,10],[4,7,3,10,1],[6,7,10,1,8],[2,8,2,5,9]]
x = np.array(a)
print 'A : ',type(x),'\n',x,'\n\n'
# print np.transpose(A)
X = np.multiply(np.transpose(x),x)
print "A'*A",type(X),'\n',X
产生
A : <type 'numpy.ndarray'>
[[ 2 7 5 9 2]
[ 8 3 1 6 10]
[ 4 7 3 10 1]
[ 6 7 10 1 8]
[ 2 8 2 5 9]]
A'*A <type 'numpy.ndarray'>
[[ 4 56 20 54 4]
[ 56 9 7 42 80]
[ 20 7 9 100 2]
[ 54 42 100 1 40]
[ 4 80 2 40 81]]
A:
[[ 2 7 5 9 2]
[ 8 3 1 6 10]
[ 4 7 3 10 1]
[ 6 7 10 1 8]
[ 2 8 2 5 9]]
A'*A
[[ 4 56 20 54 4]
[ 56 9 7 42 80]
[ 20 7 9 100 2]
[ 54 42 100 1 40]
[ 4 80 2 40 81]]
Numpy声明应用的运算符执行元素相乘
然而,在MATLAB中,矩阵乘法是不存在的
为了验证,元素乘法的MATLAB语法产生与numpy中相同的结果:
disp(x.'.*x)
4 56 20 54 4
56 9 7 42 80
20 7 9 100 2
54 42 100 1 40
4 80 2 40 81
您必须在numpy中执行元素级乘法。在Matlab中,
x..*x
给出的结果与您在那里得到的结果相同。仔细检查矩阵乘法的语法。@mikkola事实上,检查者证实了这一点。你可能想回答这个问题。(numpy中的矩阵乘法是用点
完成的)我认为不是重复的;这是关于multiply
方法的,与其他方法不同question@DavidZ我想是吧<代码>*和乘法
是等效的。无论哪种方式,都保持了“确保使用正确的运算”的精神,答案涵盖了元素和矩阵乘法。@excaza我投票支持“不重复”(我确实提到了另一个问题,但这不是很清楚)