python - 使用 numpy 计算值之间距离的平方和
问题描述
我是python和stackoverflow的新手。我正在尝试改变我对循环的思考方式。我有一系列类型为 <class '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 的例子:
指数 | 价值 |
---|---|
0 | 2 |
1 | 4 |
2 | 5 |
3 | 3 |
4 | 1 |
5 | 8 |
6 | 9 |
7 | 4 |
8 | 2 |
9 | 1 |
10 | 7 |
然后我计算平方差 (value[i]-value[j])^2 with j=i-1 to i-3 :
差异² | 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)
我仍然必须得到所选元素的总和
解决方案
你可以这样做:
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 除外)
推荐阅读
- ssas-tabular - SSAS 2017 - 计算度量中的 IF 语句,条件来自暗表
- typescript - 如何在 pwa 中导入 Twilio 以进行 OTP 验证?
- angular - 如何动态地将一个组件附加到另一个组件?
- ubuntu-16.04 - 我正在安装 ELK,但遇到了一些问题。我该如何解决?
- sql - 在 SQL Server 中使用 TO_CHAR 函数
- python - 如何使用 matplotlib 在 x 轴上绘制循环变量 i,在 y 轴上绘制循环中的局部变量
- r - 是否可以重新排列链接,以便将相应的链接连接在一起?
- amazon-web-services - 如何从 aws cli 制作 EBS 卷的快照?
- php - 如何在我的 ISP 服务器上安装 php-mime-mail-parser?
- python - Python中读取word文件中的不可打印字符