使用2d-index-array选择3d数组的值

时间:2019-01-17 18:01:51

标签: python arrays numpy image-processing vectorization

我正在努力从3d数组中获取正确的值。我有一个numpy.array(A),它表示图像的各层(layer,y,x)以及具有关联值的相同形状的第二个数组(B)。我需要找到A中每个位置的所有图层的最小值,并创建形状为(512,512)的最终图像(D),该图像根据A的最小值索引获取B的值。我可以提取正确的numpy.argmin()索引(C),但此后我迷路了。如何从B中获得正确的值?

A  # Image Array of shape(4, 512, 512)
B  # 2nd Image Array of shape(4, 512, 512)
C = numpy.argmin(A, axis=0)  # get index of lowest value for each A(:, x, y)
D = B[C, :, :]  # I want the value of B at index C for each (x,y)

我的D代码示例错误。在for循环中,它应该看起来像这样...

for y in range(512):
    for x in range(512):
        D[y, x] = B[ C[y, x], y, x ]

...但是我不知道如何以矢量化方式执行此操作(或者,您可能会称其为... pythonic方式)。我找不到能对多维数组和索引数组有用的示例。大量的文档也没有提供有用的信息。只发现了这个 select values in 3D array based on a 2D selection array (with indices values) ,但建议的解决方案是不正确的,而且也只是一个for循环。

如果某人比我了解更多,我将不胜感激。

0 个答案:

没有答案