我正在使用Numpy的matlib
样式矩阵来表示特定的算法。这意味着乘法运算符*
执行的等价于ndarray
dot()
:
>>> import numpy.matlib as nm
>>> a = nm.asmatrix([[1,1,1],[1,1,1],[1,1,1]])
>>> b = nm.asmatrix([[1,0,0],[0,1,0],[0,0,1]])
>>> a * b
matrix([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
是否有一种方法可以执行逐元素算术,就像*
运算符在ndarray
上执行的那样?
答案 0 :(得分:1)
您可以使用np.multiply
:
>>> a = np.matrix(np.random.rand(3,3))
>>> b = np.matrix(np.random.rand(3,3))
>>> a * b
matrix([[ 1.29029129, 0.53126365, 2.12109815],
[ 0.99370991, 0.55737572, 1.9167072 ],
[ 0.76268194, 0.43509462, 1.48640178]])
>>> np.asarray(a) * np.asarray(b)
array([[ 0.67445535, 0.12609799, 0.7051103 ],
[ 0.00131878, 0.42079486, 0.5223201 ],
[ 0.65558303, 0.03020335, 0.16753354]])
>>> np.multiply(a, b)
matrix([[ 0.67445535, 0.12609799, 0.7051103 ],
[ 0.00131878, 0.42079486, 0.5223201 ],
[ 0.65558303, 0.03020335, 0.16753354]])
想要对正在执行矩阵乘法的同一对象执行元素乘法有点不寻常,但您可能已经知道了。 :^)但是,看看你的算法是否有一个很好的np.einsum
描述可能是值得的。