繁体   English   中英

标准化2D数组

[英]Normalize 2d arrays

考虑一个包含正数的方阵,给出为形状为((m,m))的2d numpy数组A。 我想建立一个与条目具有相同形状的新数组B

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

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

可以提出两种利用broadcasting方法。

方法1:

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

方法2:

B = A/(d[:,None]*d) # d same as used in Approach #1

方法1具有较少的内存开销,因此我认为这样会更快。

您可以利用主对角线利用

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

另外,您可以使用

a / b[None, :]

正如您的问题所要求的,同时使用

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

如果要防止创建中间数组并执行适当的操作,则可以使用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM