【问题标题】:Normalize Numpy Upper-triangular subarray归一化 Numpy 上三角子数组
【发布时间】:2012-09-16 03:01:17
【问题描述】:

我有一个维度为 4 的上三角子数组。它被初始化为

N, Q = (99, 23)
bivariate = np.zeros((N,N,Q,Q))

然后用类似的东西填充

for i in range(N):
    for j in range(i+1,N):
        bivariate[i,j] = num

我希望将上三角元素归一化为 (Q,Q) 矩阵。我目前正在这样做,只需做一个

bivariate /= bivariate.sum(axis=3).sum(axis=2)[:,:,np.newaxis,np.newaxis]

但由于下三角部分的空数组被规范化,我收到了运行时警告。除了以下方法之外,还有更好的方法吗?

for i in range(N):
    for j in range(i+1,N):
        bivariate[i,j] /= bivariate[i,j].sum()

谢谢。

【问题讨论】:

    标签: python multidimensional-array numpy normalization


    【解决方案1】:

    FWIW,我发现单独处理上三角部分然后将其重新插入要容易得多。

    triu = np.tri_indices(n, 1)
    upper_tri = bivariate[triu].reshape(-1, Q*Q)
    upper_tri /= upper_tri.sum(axis=1)
    bivariate[triu] = upper_tri.reshape(-1, Q, Q)
    

    【讨论】:

      【解决方案2】:

      如果您担心得到np.nan,可以尝试将归一化因子的空条目替换为 1:

       norm_factor = bivariate.sum(axis=3).sum(axis=2)[:,:,None,None]
       bivariate /= np.where(norm, norm, 1)
      

      至少你会避免for 循环...

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2020-10-28
        • 2019-09-12
        • 1970-01-01
        • 2018-12-28
        • 1970-01-01
        • 2016-12-03
        • 2018-04-09
        相关资源
        最近更新 更多