我这边的另一个愚蠢问题 ;) 我对以下 len(x)=len(y)=7'700'000 片段有一些问题:
from numpy import *
for k in range(len(x)):
if x[k] == xmax:
xind = -1
else:
xind = int(floor((x[k]-xmin)/xdelta))
if y[k] == ymax:
yind = -1
else:
yind = int(floor((y[k]-ymin)/ydelta))
arr = append(arr,grid[xind,yind])
除arr
和grid
外,所有变量都是 float 或整数。 arr
是一维数组,grid
是二维数组。
我的问题是循环运行需要很长时间(几分钟)。谁能解释一下,为什么这需要这么长时间?有人有建议吗?即使我尝试通过 arange()
交换 range()
,我也只节省了几秒钟。
谢谢。
第一次编辑
对不起。忘了告诉我我正在导入 numpy
第二次编辑
我在二维网格中有一些点。网格的每个单元格都存储了一个值。我必须找出该点的位置并将该值应用于新数组。这是我的问题,也是我的想法。
p.s.:想看得懂的就看图吧。单元格的值用不同的颜色表示。
最佳答案
怎么样:
import numpy as np
xind = np.floor((x-xmin)/xdelta).astype(int)
yind = np.floor((y-ymin)/ydelta).astype(int)
xind[np.argmax(x)] = -1
yind[np.argmax(y)] = -1
arr = grid[xind,yind]
注意:如果您使用的是 numpy,如果您想高效地做事,请不要将数组视为 python 列表。
关于python - 减少 python 中长循环的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655052/