【问题标题】:How to calculate the mean and standard deviation of similarity matrix?如何计算相似度矩阵的均值和标准差?
【发布时间】:2019-10-30 14:35:14
【问题描述】:

我正在处理 CSV 文件,并且我有一个计算文档之间相似度的代码。帖子1提供数据和输出的代码和细节如下:

data.csv 看起来像:

idx         messages
112  I have a car and it is blue
114  I have a bike and it is red
115  I don't have any car
117  I don't have any bike

输出是:

    id     112    114    115    117
    id                             
    112  100.0   78.0   51.0   50.0
    114   78.0  100.0   47.0   54.0
    115   51.0   47.0  100.0   83.0
    117   50.0   54.0   83.0  100.0

现在我想在没有身份数据 (100.0) 的情况下计算相似度矩阵的下三角的均值和标准差(因为上下都相似)。

我尝试使用 panda 内置的 mean 和 std as:

df_std = df.std()
df_Mean = df.mean()

但这会考虑输出中的所有数据,例如身份和上三角。

我想知道是否有任何方法可以按照我提到的方式计算平均值和标准差。

【问题讨论】:

  • 你的预期输出是什么

标签: python pandas numpy dataframe similarity


【解决方案1】:

numpy.trilk=-1 一起使用并将np.nan 设为0:

import numpy as np

ltri = np.tril(df.values, -1)
ltri = ltri[np.nonzero(ltri)]

输出:

array([[ 0.,  0.,  0.,  0.],
       [78.,  0.,  0.,  0.],
       [51., 47.,  0.,  0.],
       [50., 54., 83.,  0.]])

现在你可以做ltri.std()ltri.mean()

ltri.std(), ltri.mean()
# (14.361406616345072, 60.5)

【讨论】:

  • @ALollz 啊忘了添加 non_zeros。让我更新一下;)
  • 感谢您的评论和代码。我会提前感谢的。我也有一个问题。现在代码已准备好一个 CSV 文件并在每个 idx 之间执行相似性。如何在 2 个不同的文档之间执行相同的相似性?
  • @Bilgin 更新了关于零的信息。对于您评论中的问题,我建议您编辑当前问题或通过一些示例发布另一个问题(推荐):)
【解决方案2】:

您可以将所有不需要的值屏蔽为np.nan

df.values[np.triu_indices_from(df.values,0)]=np.nan
df.mean()
112    59.666667
114    50.500000
115    83.000000
117          NaN
dtype: float64
df.std()
112    15.885003
114     4.949747
115          NaN
117          NaN
dtype: float64

掩码后的值

df
      112   114   115  117
112   NaN   NaN   NaN  NaN
114  78.0   NaN   NaN  NaN
115  51.0  47.0   NaN  NaN
117  50.0  54.0  83.0  NaN

【讨论】:

  • 感谢您的评论。如何计算三角形的整个上平均值或下平均值。是不是像例子``` df.mean(df.mean())``` ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2014-03-21
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多