我正在使用SymPy进行线性代数。我想在两个矩阵上执行逐元素乘法(Hadamard积)。
例如,
sympy.MatrixSymbol('X', 4, 3) [operator/method] sympy.MatrixSymbol('W', 4, 3)
Run Code Online (Sandbox Code Playgroud)
会给
[[X[0,0]*W[0,0], X[0,1]*W[0,1], ...],[X[1,0]*W[1,0], X[1,1]*W[1,1], ...]]
Run Code Online (Sandbox Code Playgroud)
但是似乎没有办法。有什么方法可以用SymPy执行逐元素乘法吗?
是的,SymPy中有一个函数可以执行逐元素乘法(Hadamard乘积)。根据他们的SymPy 0.7.6文档,该函数是:
乘元素(b)
返回A和B的Hadamard乘积(元素乘积)。
例:
>>> from sympy.matrices import Matrix
>>> A = Matrix([[0, 1, 2], [3, 4, 5]])
>>> B = Matrix([[1, 10, 100], [100, 10, 1]])
>>> A.multiply_elementwise(B)
Matrix([
[ 0, 10, 200],
[300, 40, 5]])
Run Code Online (Sandbox Code Playgroud)
更新:对于使用元素的乘法,请MatrixSymbols使用以下函数:
HadamardProduct(A,B)
例如:
>>> from sympy import HadamardProduct
>>> A = MatrixSymbol('A', m, n)
>>> B = MatrixSymbol('B', m, n)
>>>print(HadamardProduct(A,B))
A.*B
Run Code Online (Sandbox Code Playgroud)