numpy:多维键的多维结果的高效查找

numpy:多维键的多维结果的高效查找,numpy,lookup,numpy-ndarray,Numpy,Lookup,Numpy Ndarray,为了激发标题中的“效率”:我正在处理高达512x512x1000像素的体积图像数据。因此,慢循环等不是一个真正的选项,特别是如果图像需要在GUI中查看。想象一下,坐在观众面前等待图像加载的时间只有10秒 我从两个3D输入体积x和y计算新的3D输出体积,目前一次最多三个,例如通过求解每个像素的方程系统。由于很多x、y组合实际上是重复的,而且通常只有一个连贯的网格范围是感兴趣的,所以我试图通过为这个子区域创建一个查找表来加快速度。效果很好,在我的测试用例中,我只需要大约3000次计算,而不是3000

为了激发标题中的“效率”:我正在处理高达512x512x1000像素的体积图像数据。因此,慢循环等不是一个真正的选项,特别是如果图像需要在GUI中查看。想象一下,坐在观众面前等待图像加载的时间只有10秒

我从两个3D输入体积x和y计算新的3D输出体积,目前一次最多三个,例如通过求解每个像素的方程系统。由于很多x、y组合实际上是重复的,而且通常只有一个连贯的网格范围是感兴趣的,所以我试图通过为这个子区域创建一个查找表来加快速度。效果很好,在我的测试用例中,我只需要大约3000次计算,而不是3000万次

现在,问题是:我完全无法以numpythonic的方式从3000个解决方案查找表中高效地查找3000万个x,y组合的解决方案

让我们举一个例子:

#                    x  y   s1   s2
lookup = np.array([[ 4, 11, 23.,  4. ],
                   [ 4, 12, 25., 13. ],
                   [ 5, 11, 21., 19. ],
                   [ 5, 12, 26., 56. ]])
我成功地获得了一个x,y对的索引,如下所示:

问题1:但如何将其矢量化,即获得3000万像素的完整解决方案阵列

s1, s2 = lookup[numpy_magic_with_xy, -2:]
问题2:事实上,我想把不在感兴趣区域内的所有x,y的所有解都设为零。我在哪里添加该条件

问题3:实现这一切的最快方法是什么

PS:我可以通过使用x.ravel()等来使用1D图像表示,并在最后进行重塑。除非你告诉我我不需要,这只会让事情变慢。只是为了理解我自己的代码我想

s1, s2 = lookup[numpy_magic_with_xy, -2:]