Python 逐元素乘法
Python Element-wise Multiplication
在 MATLAB 中,我使用
进行计算
repmat(A-B,100,1).*rand(100,length(B))
这里,A
和B
是1*19大小的矩阵。
要在 Python 中执行相同的代码,我使用以下代码-
np.matmul(np.matlib.repmat(A - B, 100, 1), np.matlib.rand(100, len(B)))
根据 运行 代码,我得到以下错误-
ValueError: matmul:
Input operand 1 has a mismatch in its core dimension 0,
with gufunc signature (n?,k),(k,m?)->(n?,m?)
(size 100 is different from 19)
我该怎么办?
MATLAB 的 .*
是一个 broadcasting operator. It scalar-extends the *
operator to apply to matrices of matching size pointwise. This is not matrix multiplication,这是一种不同的矩阵运算,需要中间两个维度匹配。
Python 中 .*
的等效项,假设 left-hand 和 right-hand 端是 numpy
数组,就是 *
。
np.matlib.repmat(A - B, 100, 1) * np.matlib.rand(100, len(B))
如果 left-hand 和 right-hand 边是 而不是 numpy
数组(例如,如果它们是普通的 Python 列表),然后你可以通过预先调用 numpy.array
来转换它们
在 MATLAB 中,我使用
进行计算repmat(A-B,100,1).*rand(100,length(B))
这里,A
和B
是1*19大小的矩阵。
要在 Python 中执行相同的代码,我使用以下代码-
np.matmul(np.matlib.repmat(A - B, 100, 1), np.matlib.rand(100, len(B)))
根据 运行 代码,我得到以下错误-
ValueError: matmul:
Input operand 1 has a mismatch in its core dimension 0,
with gufunc signature (n?,k),(k,m?)->(n?,m?)
(size 100 is different from 19)
我该怎么办?
MATLAB 的 .*
是一个 broadcasting operator. It scalar-extends the *
operator to apply to matrices of matching size pointwise. This is not matrix multiplication,这是一种不同的矩阵运算,需要中间两个维度匹配。
Python 中 .*
的等效项,假设 left-hand 和 right-hand 端是 numpy
数组,就是 *
。
np.matlib.repmat(A - B, 100, 1) * np.matlib.rand(100, len(B))
如果 left-hand 和 right-hand 边是 而不是 numpy
数组(例如,如果它们是普通的 Python 列表),然后你可以通过预先调用 numpy.array
来转换它们