首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用K_ij中的K_ii*K_jj快速划分矩阵条目K_ii*K_jj

用K_ij中的K_ii*K_jj快速划分矩阵条目K_ii*K_jj
EN

Stack Overflow用户
提问于 2020-03-02 08:03:55
回答 1查看 64关注 0票数 2

在Python中,我有一个维数( N )的矩阵K。我希望通过将每个条目除以sqrt(K_(i,i)*K_(j,j))来规范K_ij。在Python中,在不迭代每个条目的情况下实现这一目标的快速方法是什么?

我目前的解决办法是:

代码语言:javascript
复制
import numpy as np
K = np.random.rand(3,3)
diag = np.diag(K)
for i in range(np.shape(K)[0]):
    for j in range(np.shape(K)[1]):
        K[i,j] = K[i,j]/np.sqrt(diag[i]*diag[j])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 08:08:53

当然,您必须遍历每个条目,至少在内部是这样的。对于方阵:

代码语言:javascript
复制
K / np.sqrt(np.einsum('ii,jj->ij', K, K))

如果矩阵不是正方形,那么首先必须定义应该替换“缺失”值的是什么-- K[i,i]i > j等。

选择:使用numba保持循环不变,获得自由加速比,甚至避免中间分配:

代码语言:javascript
复制
@njit
def normalize(K):
    M = np.empty_like(K)
    m, n = K.shape
    for i in range(m):
        Kii = K[i,i]
        for j in range(n):
            Kjj = K[j,j]
            M[i,j] = K[i,j] / np.sqrt(Kii * Kjj)
    return M
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60484684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档