使用 numpy 计算值之间距离的平方和

时间:2021-06-09 16:10:06

标签: python pandas numpy

我是 Python 和 stackoverflow 的新手。我正在尝试改变我对循环的看法。 我有一系列类型为 的值。

目标:给出深度 n,我想计算每个值(除了前 2*n-2):

result(i) = sum[j=0 to n-1](distance(i-j)*value[i-j])/sum[j=0 to n-1](distance[j])

with distance(i) = sum[k=1 to n-1]((value[i]-value[i-k])^2)

我想避免循环,那么使用 numpy 有没有更好的方法来实现我的目标?

编辑: 好吧,我好像不是很清楚,所以这里是一个 n= 4 的例子:

<头>
索引 价值
0 2
1 4
2 5
3 3
4 1
5 8
6 9
7 4
8 2
9 1
10 7

然后我用 j=i-1 到 i-3 计算平方差 (value[i]-value[j])^2 :

<头>
diff² 0 1 2 3 4 5 6 7 8 9 10
0
1
2
3 1 1 4
4 9 16 4
5 9 25 49
6 36 64 1
7 9 16 25
8 36 49 4
9 64 9 1
10 9 25 36

我认为获取这个矩阵,无论是否完整是我问题的核心。 我现在可以计算 distance(i),它是一行和 distance(i)*value(i) 的总和:

<头>
索引 距离 距离 x 值
0
1
2
3 6 18
4 29 29
5 83 664
6 101 909
7 50 200
8 89 178
9 74 74
10 70 490

最后我可以得到结果:

<头>
索引 价值 结果
0 2
1 4
2 5
3 3
4 1
5 8
6 9 7.397260274
7 4 6.851711027
8 2 6.040247678
9 1 4.334394904
10 7 3.328621908

例如:

result(10) = (distance(10)*value(10)+distance(9)*value(9)+distance(8)*value(8)+distance(7)*value(7))/(distance(10)+distance(9)+distance(8)+distance(7))

如果需要,我有该算法的 Java 版本。 谢谢。

更新: 我终于找到了如何获得完整的平方差矩阵:

import numpy as np
import pandas as pd

n=4
myseries=pd.Series([2, 4, 5, 3, 1, 8, 9, 4, 2, 1, 7])
l=len(myseries)

vector = np.repeat(myseries, l)
mat = vector.to_numpy().reshape((l, l))
diff = mat-np.transpose(mat)

squared_diff = np.multiply(diff, diff)

print(squared_diff)

我仍然需要获取所选元素的总和

1 个答案:

答案 0 :(得分:0)

你可以这样做:

myseries = pd.Series(np.random.rand(100), dtype='float32')

sum_of_squared_distances= np.sum(np.square(np.diff(myseries.values[:n][1::2])))

其中“n”是第 n 个索引(深度),而 [1::2] 部分仅获取奇数索引值,因为您只需要与奇数索引对应的值(2*n-2 除外)

相关问题