使用numpy的逐元素矩阵乘法(哈达玛乘积)



假设我有两个 numpy ndarray,它们的元素是矩阵。我需要对这两个数组进行逐元素乘法,但是,两个矩阵元素之间应该有矩阵乘法。当然,我将能够使用 for 循环实现这一点,但我希望在不使用显式 for 循环的情况下解决此问题。我该如何实现?

编辑:这个for循环做了我想做的事情。我在蟒蛇 2.7 上

n = np.arange(8).reshape(2,2,1,2)
l = np.arange(1,9).reshape(2,2,2,1)
k = np.zeros((2,2))
for i in range(len(n)):
    for j in range(len(n[i])):
        k[i][j] =  np.asscalar(n[i][j].dot(l[i][j]))
print k

假设您的矩阵数组作为n+2维数组给出AB。您想要实现的目标就像C = A@B一样简单

outer_dims = 2,3,4
inner_dims = 4,5,6
A = np.random.randint(0,10,(*outer_dims, *inner_dims[:2]))
B = np.random.randint(0,10,(*outer_dims, *inner_dims[1:]))
C = A@B
# check
for I in np.ndindex(outer_dims):
    assert (C[I] == A[I]@B[I]).all()

更新:Py2版本;感谢@hpaulj,Divakar。

A = np.random.randint(0,10, outer_dims + inner_dims[:2])
B = np.random.randint(0,10, outer_dims + inner_dims[1:])
C = np.matmul(A,B)
# check
for I in np.ndindex(outer_dims):
    assert (C[I] == np.matmul(A[I],B[I])).all()

如果我理解正确,这可能会起作用:

import numpy as np
a = np.array([[1,1],[1,0]])
b = np.array([[3,4],[5,4]])
x = np.array([[a,b],[b,a]])
y = np.array([[a,a],[b,b]])
result = np.array([_x @ _y for _x, _y in zip(x,y)])

最新更新