我有一个二维网格代表一组像素。对于每个像素,我有左上角的坐标。你知道吗
我还有一个很长的随机分布的2D点列表。我正在寻找一种有效的方法来寻找每个像素点的索引。你知道吗
目前我有以下几点:
import numpy as np
xgrid = np.linspace(0,10,11)
ygrid = np.linspace(0,10,11)
X_random_points = np.random.rand(int(1e7))*10
Y_random_points = np.random.rand(int(1e7))*10
for iterationX in range(0,len(xgrid)-1):
for iterationY in range(0,len(ygrid)-1):
valuesInCube = (X_random_points<xgrid[iterationX]) & (X_random_points>xgrid[iterationX-1]) & (Y_random_points<ygrid[iterationY]) &(Y_random_points>ygrid[iterationY-1])
我想知道有没有人知道怎么做得更快?你知道吗
我可以给你一个可能仍然有用的相关方法。相反,您可以找到每个点属于哪个像素。函数
numpy.digitize
和scipy.stats.binned_statistic_2d
在这里很有用。scipy.stats.binned_statistic_2d
感觉有点笨拙,因为它不仅仅是存储点,还需要为每个x,y点提供一些值。你知道吗您应该注意,bin编号从
1
(而不是0
)开始计数。你知道吗对于特定像素,您甚至可以从
x_p
和y_p
中找到属于该像素的所有点。你知道吗可以使用^{} 对整个操作进行矢量化,并完全避免循环,只要每个方向上像素之间的间隔是均匀的。对于简单的情况,
xgrid
和ygrid
是整数,您可以这样做如果像素不在整数网格上,则必须知道它们之间的间距。在这种情况下,我建议使用
np.arange
而不是np.linspace
来生成像素位置:对于整数情况,您实际上是在做同样的事情,因为
delta_x
和delta_y
都是1
。你知道吗相关问题 更多 >
编程相关推荐