我有一个网格点的nd数组,G
,然后是一个binsB
的重叠nd数组,如下图所示。G
的索引显示为蓝色,B
的索引显示为红色。给定一个bin的索引(红色),我想找到封闭网格点的索引(蓝色)。你知道吗
例如,给定bin索引7
,封闭的网格点索引将是(1, 2, 5, 6)
。你知道吗
我正在寻找一种解决方案,它应该适用于n维数组,而不仅仅是2D数组。我觉得这应该是一个经常出现的问题,但是在numpy中还没有找到任何解决方案,我正在努力为n维找到一个优雅的解决方案。你知道吗
请注意,B
的索引数在每个数组维度上都大于G
。你知道吗
一些测试代码
import numpy as np
G = np.arange(3*4).reshape(3, 4)
B = np.arange(4*5).reshape(4, 5)
idx = 7
我有个解决办法,我早该想到的。如果你先解开索引,一切就容易多了。我已经用解开的索引注释了我的原图。你知道吗
展开的bin索引始终是网格中最远的一角,因此您可以采用在每个维度中减去一个位置的所有组合来查找所有其他边。这可以通过
itertools.product
轻松快速地完成。注意,在使用索引时必须小心,因为查询网格之外的bin(例如bin_idx=0
或4
)将返回无效的索引。这可以在实际查询时用try
和except
块来处理,如@alec\u djinn的答案。你知道吗您可以使用以下代码构建一个字典来关联索引。你知道吗
这将创造
然后在dict的值中查找
idx
结果:
我终于想出了一种不需要建立查找表的替代方法。 但是,您需要重新调整阵列以使其正常工作。你知道吗
结果是:
这里是
flatten()
的代码相关问题 更多 >
编程相关推荐