规格化二维阵列

2024-04-26 11:49:57 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑包含正数的平方矩阵,作为二维numpy数组a的形状((m,m))。我想构建一个新的数组B,它的形状与条目相同

B[i,j] = A[i,j] / (np.sqrt(A[i,i]) * np.sqrt(A[j,j]))

一个明显的解决方案是循环所有(i,j),但我想知道是否有更快的方法。


Tags: 方法numpynp条目矩阵sqrt数组解决方案
2条回答

可以提出两种利用^{}的方法。在

方法1:

d = np.sqrt(np.diag(A))
B = A/d[:,None]
B /= d

方法2:

^{pr2}$

方法1的内存开销较小,因此我认为速度会更快。在

您可以通过使用

b = np.sqrt(np.diag(a))
a / b[:, None]

此外,还可以使用

^{pr2}$

就像你的问题所问的那样,使用

a / (b[:, None] * b[None, :])

如果要防止创建中间数组并就地执行操作,可以使用

a /= b[:, None]
a /= b[None, :]

相关问题 更多 >