gpt4 book ai didi

python - 避免在数据值分配中使用 for 循环

转载 作者:行者123 更新时间:2023-11-30 23:37:42 24 4
gpt4 key购买 nike

这是我之前的问题的一个小后续问题:Generate coordinates inside Polygon和我的回答https://stackoverflow.com/a/15243767/1740928事实上,我想将多边形数据合并到规则网格中。因此,我计算多边形内的几个坐标,并将它们的纬度/经度组合转换为网格各自的列/行组合。

目前,行/列信息存储在numpy数组中,行数对应数据多边形的数量,列数对应多边形中的坐标。

整个代码花费了不到一秒的时间,但这段代码是目前的瓶颈(大约7秒):

for ii in np.arange(len(data)):
for cc in np.arange(data_lats.shape[1]):
final_grid[ row[ii,cc], col[ii,cc] ] += data[ii]
final_grid_counts[ row[ii,cc], col[ii,cc] ] += 1

数组“data”仅包含每个多边形的数据值(80000,)。数组“row”和“col”包含多边形(形状:(80000,16))中坐标的行号和列号。正如您所看到的,我正在总结每个网格单元内的所有数据值并计算匹配的数量。因此,我知道每个网格单元的平均值,以防不同的多边形与其相交。不过,这两个 for 循环怎么会花费大约 7 秒呢?你能想出更快的方法吗?

最佳答案

我认为 numpy 应该添加一个 nd-bincount 函数,我前段时间正在做的一个项目中就有一个。

import numpy as np

def two_d_bincount(row, col, weights=None, shape=None):
if shape is None:
shape = (row.max() + 1, col.max() + 1)
row = np.asarray(row, 'int')
col = np.asarray(col, 'int')

x = np.ravel_multi_index([row, col], shape)
out = np.bincount(x, weights, minlength=np.prod(shape))
return out.reshape(shape)

weights = np.column_stack([data] * row.shape[1])
final_grid = two_d_bincount(row.ravel(), col.ravel(), weights.ravel())
final_grid_counts = two_d_bincount(row.ravel(), col.ravel())

我希望这会有所帮助。

关于python - 避免在数据值分配中使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257233/

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