如何在Numpy矩阵上进行逐元素算术?

时间:2014-06-28 01:21:06

标签: python-3.x numpy

我正在使用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上执行的那样?

1 个答案:

答案 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描述可能是值得的。