gpt4 book ai didi

python - 在python中计算给定距离的网格值

转载 作者:行者123 更新时间:2023-11-30 22:05:54 25 4
gpt4 key购买 nike

我有一个大尺寸的单元格网格。每个单元格都有一个 ID ( p1 )、单元格值 ( p3 ) 和实际测量中的坐标 ( XY )。这是前 10 行/单元格的样子

      p1     p2          p3     X  Y
0 0 0.0 0.0 0 0
1 1 0.0 0.0 100 0
2 2 0.0 12.0 200 0
3 3 0.0 0.0 300 0
4 4 0.0 70.0 400 0
5 5 0.0 40.0 500 0
6 6 0.0 20.0 600 0
7 7 0.0 0.0 700 0
8 8 0.0 0.0 800 0
9 9 0.0 0.0 900 0

i 中单元格 p1 的相邻单元格可以确定为 ( i-500+1 , i-500-1 , i-1 , i+1 , i+500+1 , i+500-1 )。例如: p1 为 5,其邻居为 - 4,6,504,505,506。 (这些是上表中行的 ID - p1 )。

我正在尝试的是:对于 i 中选定的值/行 p1 ,我想知道距 i 选定距离内的所有邻居,并对它们所有的 p3 值求和。

我尝试应用此解决方案( link ),但我不知道如何合并距离参数。可以使用 df.iloc 获取单元格值,但在此之前的步骤对我来说有点棘手。

你能给我一些建议吗?

编辑:使用 Thomas 的解决方案并将 df 称为 CO :

      p3
0 45
1 580
2 12000
3 12531
4 22456

我想添加另一列并使用 p3 列中的值

CO['new'] = format(sum_neighbors(data, CO['p3']))

但是这不起作用。如果我添加一个数字而不是对行 CO['p3'] 的引用,它就会像魅力一样工作。但是如何在 format 函数中自动使用 p3 列中的值?

已解决:它适用于:

CO['new'] = CO.apply(lambda row: sum_neighbors(data, row.p3), axis=1)

最佳答案

解决方案:

import numpy as np
import pandas

# Generating toy data
N = 10
data = pandas.DataFrame({'p3': np.random.randn(N)})
print(data)

# Finding neighbours
get_candidates = lambda i: [i-500+1, i-500-1, i-1, i+1, i+500+1, i+500-1]
filter = lambda neighbors, N: [n for n in neighbors if 0<=n<N]
get_neighbors = lambda i, N: filter(get_candidates(i), N)

print("Neighbors of 5: {}".format(get_neighbors(5, len(data))))

# Summing p3 on neighbors
def sum_neighbors(data, i, col='p3'):
return data.iloc[get_neighbors(i, len(data))][col].sum()

print("p3 sum on neighbors of 5: {}".format(sum_neighbors(data, 5)))

输出:

         p3
0 -1.106541
1 -0.760620
2 1.282252
3 0.204436
4 -1.147042
5 1.363007
6 -0.030772
7 -0.461756
8 -1.110459
9 -0.491368

Neighbors of 5: [4, 6]

p3 sum on neighbors of 5: -1.1778133703169344

注释:

  • 我假设 p1range(N),这似乎是暗示的(所以我们根本不需要它)。
  • 鉴于OP定义的i的邻居列表,我不认为5055的邻居。

关于python - 在python中计算给定距离的网格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com