我正在处理CSV文件,并且我有一个计算文档之间相似度的代码。 1帖子提供了代码和数据以及输出的详细信息,如下所示:
data.csv看起来是:
<iostream>
输出为:
<algorithm>
现在,我想在没有身份数据(100.0)的情况下计算相似度矩阵的下三角的均值和标准偏差(因为上和下都是相似的)。
我尝试将熊猫内置的mean和std用作:
#include <iostream>
#include <tuple>
using namespace std;
tuple<int, int> PARTITION(int *a, int p, int q)
{
int i = p - 1;
int j = q + 1;
int t1 = p - 1;
int t2 = q;
int x = a[q];
cout << t2 << endl;
cout << j << endl;
while (t1 < t2)
{
while ((t2 != j) && (t1 < t2))
{
++t1;
if (a[t1] < x)
swap(a[t1], a[++i]);
else if (a[t1] > x)
swap(a[t1], a[--j]);
}
while ((t1 != i) && (t1 < t2))
{
--t2;
if (a[t2] > x)
swap(a[t2], a[--j]);
else if (a[t2] < x)
swap(a[t2], a[++i]);
}
}
return tuple<int, int>(i, j);
}
void QSORT(int *a, int p, int q)
{
if (p < q)
{
tuple<int, int> pos = PARTITION(a, p, q);
QSORT(a, p, get<0>(pos));
QSORT(a, get<1>(pos), q);
}
}
int main()
{
int a[] = {9, 21, 3, 2, 6, 7, 4, 55, 10};
int len = sizeof(a) / sizeof(a[0]);
QSORT(a, 0, len - 1);
for (int i = 0; i < len; ++i)
cout << a[i] << " ";
cout << endl;
}
但这会考虑输出中的所有数据,例如恒等和上三角。
我想知道是否有任何方法可以按照我提到的方式计算平均值和标准偏差。
答案 0 :(得分:2)
将numpy.tril
与k=-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)
答案 1 :(得分:1)
您可以将所有不需要的值都屏蔽为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