Python 逐元素乘法

Python Element-wise Multiplication

在 MATLAB 中,我使用

进行计算
repmat(A-B,100,1).*rand(100,length(B))

这里,AB是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 来转换它们