【发布时间】:2012-07-03 08:55:32
【问题描述】:
numpy 中是否有等效的 Matlab dot 函数?
Matlab 中的dot 函数:
对于多维数组 A 和 B,dot 返回沿 A 和 B 的第一个非单维的标量积。A 和 B 的大小必须相同。
在 numpy 中,以下类似但不等价:
dot (A.conj().T, B)
【问题讨论】:
-
你的A和B是什么类型的? numpy 数组还是 numpy 矩阵?
numpy 中是否有等效的 Matlab dot 函数?
Matlab 中的dot 函数:
对于多维数组 A 和 B,dot 返回沿 A 和 B 的第一个非单维的标量积。A 和 B 的大小必须相同。
在 numpy 中,以下类似但不等价:
dot (A.conj().T, B)
【问题讨论】:
在 MATLAB 中,dot(A,B) 两个相同大小的矩阵 A 和 B 很简单:
sum(conj(A).*B)
等效的 Python/Numpy:
np.sum(A.conj()*B, axis=0)
【讨论】:
Matlab 示例1:
A = [1,2,3;4,5,6]
B = [7,8,9;10,11,12]
dot(A,B)
结果: 47 71 99
Matlab 例子2:
sum(A.*B)
结果: 47 71 99
Numpy版本的Matlab例子2:
A = np.matrix([[1,2,3],[4,5,6]])
B = np.matrix([[7,8,9],[10,11,12]])
np.multiply(A,B).sum(axis=0)
结果: 矩阵([[47, 71, 99]])
【讨论】:
检查这些备忘单。
Numpy 包含一个数组类和一个矩阵类。 array 类旨在成为用于多种数值计算的通用 n 维数组,而 matrix 旨在促进线性代数计算。实际上,两者之间只有少数几个关键区别。
运算符
*、dot() 和 multiply():
对于数组,*表示逐元素乘法,dot() 函数用于矩阵乘法。
对于矩阵,*表示矩阵乘法,multiply() 函数用于逐元素乘法。
【讨论】: