假设X
是:
X = np.asarray(
[0.5, 0.5],
[0.87070241, 0.12929759],
[0.97738616, 0.02261384],
[0.99200957, 0.00799043]], dtype=np.float32)
对于每一行,我想将一行变成对角矩阵,并从中减去外积,如下所示:
np.diagflat(X[i, :]) - np.outer(X[i, :], X[i, :])
对于任何索引i
。
当然,我可以在i
上编写一个for循环,但是有没有办法以向量化的形式来实现它?
我发现似乎可以将减去的部分重写为:
X.T[:, None, :] * X.T[None, :]
但仍然不知道如何在不添加for循环的情况下正确地在其中添加diagflat
或其等效内容。
答案 0 :(得分:2)
可能有一种更具可读性的方法,但是:
(np.eye(2) * X[:, np.newaxis]) - (X[:, np.newaxis]) * X[..., np.newaxis]
应该做你想做的事。
编辑:从OP修正后,我的最初回答为(np.eye(2)[np.newaxis] - X[:, np.newaxis]) * X[..., np.newaxis]
。