Numpy 矩阵乘法,而不是乘以 XOR 的元素

Kya*_*att 5 python algorithm numpy matrix

如标题中所述,我想进行一个计算,而不是将相应的元素相乘,而是对它们进行二进制异或,然后将它们相加。举例说明:

举例说明:

编辑:上面的大图是计算,但我们开始了:从左侧 [1 0 1] 取第一行,从顶部矩阵 [1 0 0] 取第一列。1 XOR 1 = 0, 0 XOR 0 = 0, 1 XOR 0 = 1. 将它们全部相加 0 + 0 + 1 = 1. 从左数第一行 [1 0 1], 第二列 [0 0 0]: 1 XOR 0 = 1, 0 XOR 0 = 0, 1 XOR 0 = 1. 将它们全部相加 1 + 0 + 1 = 2. 依此类推

有可能在 numpy 中做到这一点吗?

Kev*_*vin 4

尝试这个:

M1 = np.array([[1, 0, 0], [0, 0, 0], [0, 0, 0]])
M2 = np.array([[1, 0, 1], [0, 0, 1], [1, 1, 1]])
(M1 ^ M2[:,None]).sum(-1)
Run Code Online (Sandbox Code Playgroud)

输出:

array([[1, 2, 2],
       [2, 1, 1],
       [2, 3, 3]])
Run Code Online (Sandbox Code Playgroud)

编辑

如果你想预分配内存:

intermediary = np.empty((3,3,3), dtype=np.int32)
np.bitwise_xor(M1, M2[:,None], out=intermediary).sum(-1)
Run Code Online (Sandbox Code Playgroud)