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

2024-09-20 07:38:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python和stackoverflow的新手。我试图改变我对循环的思考方式。 我有一系列值,其类型为<;类“pandas.core.series.series”>

目标:给定深度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的例子:

^{tb1}$

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

^{tb2}$

我认为得到这个矩阵,完整与否是我问题的核心。 我现在可以计算距离(I),它是一行和距离(I)*值(I)的总和:

^{tb3}$

最后我可以得到结果:

^{tb4}$

例如:

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)

我仍然需要得到所选元素的总和


Tags: tonumpy目标pandasvaluenpdiff矩阵
1条回答
网友
1楼 · 发布于 2024-09-20 07:38:10

你可以这样做:

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除外)

相关问题 更多 >