我有两个 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 方法来实现这个逻辑。
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. ]]