假设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
。
当然,我可以只写一个for循环,i
但是有什么方法可以向量化的形式进行?
我发现,似乎可以将减去的部分重写为:
X.T[:, None, :] * X.T[None, :]
但是仍然不知道如何在diagflat
不添加for循环的情况下正确地在此处添加或与之等效的线索。
可能有一种更具可读性的方法,但是:
(np.eye(2) * X[:, np.newaxis]) - (X[:, np.newaxis]) * X[..., np.newaxis]
应该做你想做的。
编辑:(np.eye(2)[np.newaxis] - X[:, np.newaxis]) * X[..., np.newaxis]
从OP进行更正后,我的最初答案已更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句