代码之家  ›  专栏  ›  技术社区  ›  O.rka

如何在python中有效地只计算这个操作的上三角?

  •  2
  • O.rka  · 技术社区  · 6 年前

    我正在做一个计算,测量 pd.Series . 虽然它是一个向量运算,一次完成,但我觉得它效率很低,因为它还计算下三角形和上三角形的值(基本上是值*-1)。我只想要上面的三角形。

    我如何才能只计算上三角的值(而不是事后索引它们)?

    我可以转换 pandas numpy 如果它能显著加快操作速度。

    profile = np.log(pd.Series({'Attr000001': 17511, 'Attr000002': 4, 'Attr000003': 8078, 'Attr000004': 1, 'Attr000005': 1716}))
    idx_attrs = profile.index
    
    d_ratio = dict()
    for j,id_attr in enumerate(idx_attrs):
        d_ratio[id_attr] = (profile[id_attr] - profile).to_dict()
    df_ratio = pd.DataFrame(d_ratio).T
    # print(df_ratio)
    #             Attr000001  Attr000002  Attr000003  Attr000004  Attr000005
    # Attr000001    0.000000    8.384290    0.773685    9.770585    2.322833
    # Attr000002   -8.384290    0.000000   -7.610605    1.386294   -6.061457
    # Attr000003   -0.773685    7.610605    0.000000    8.996900    1.549148
    # Attr000004   -9.770585   -1.386294   -8.996900    0.000000   -7.447751
    # Attr000005   -2.322833    6.061457   -1.549148    7.447751    0.000000
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   wim    6 年前

    >>> profile[:, None] - profile[None, :]
    array([[ 0.        ,  8.38429017,  0.77368494,  9.77058453,  2.32283325],
           [-8.38429017,  0.        , -7.61060524,  1.38629436, -6.06145692],
           [-0.77368494,  7.61060524,  0.        ,  8.9968996 ,  1.54914832],
           [-9.77058453, -1.38629436, -8.9968996 ,  0.        , -7.44775128],
           [-2.32283325,  6.06145692, -1.54914832,  7.44775128,  0.        ]])