Python 中两个矩阵的自定义 Hadamard 式乘积

问题描述 投票:0回答:1

我有两个 numpy 矩阵 A 和 B(大小为 m x n,m<>n,m=行数,n=列数)。两者都是数字矩阵,仅包含条目 0 或 1。

我想从这两个矩阵计算矩阵乘积 C,该矩阵在 A(行,列)方面遵循以下规则:

If A(i,j) = 1 and B(i,j)=1, C(i,j)=1.
If A(i,j) = 1 and B(i,j)=0, C(i,j)=-q.
If A(i,j) = 0, C(i,j) = 0, regardless of the value of B(i,j).

其中 q 满足方程 p-(n-p)*q=0 其中 p 是 B(i,:) 中 1 的数量。

我可以用几个 for 循环来实现这个,但我很想问是否有一种单行 pythonic 方法来实现这个逻辑。

python numpy matrix-multiplication
1个回答
0
投票

IIUC 你可以做:

假设你有两个矩阵 5x2:

# A
[[0 1 0 1 1]
 [1 1 1 1 0]]

# B
[[0 0 1 1 1]
 [0 0 1 1 0]]

然后:

m, n = A.shape            # 5, 2
p = B.sum(axis=1)         # [3 2]
q = p / (n - p)           # [1.5        0.66666667]

m1 = A & B
m2 = (A & ~B) * -q[:, None]

print(m1 + m2)

打印:

[[ 0.         -1.5         0.          1.          1.        ]
 [-0.66666667 -0.66666667  1.          1.          0.        ]]
© www.soinside.com 2019 - 2024. All rights reserved.