如何根据第三轴上的所有值从numpy数组中获取掩码

时间:2016-10-08 10:40:41

标签: python arrays numpy vectorization

我有像numpy数组:

A = np.zeros((X,Y,Z)) 

后来我用数组填充数组,我需要根据z轴上数组的值找到x,y坐标,用不同的数组替换它。

示例Z=2我有数组

A = [ [ [1,2], [2,1], [0, 0] ],
      [ [1,1], [1,1], [0, 0] ], ]

我需要像

这样的东西
A[ where A[x,y,:] == [1,2] ] = [2,1]

什么会产生数组

A = [ [ [2,1], [2,1], [0, 0] ],
      [ [1,1], [1,1], [0, 0] ], ]

有可能以某种方式简单实现吗?我想避免迭代x,y坐标。

1 个答案:

答案 0 :(得分:3)

一种矢量化方法 -

A[(A == [1,2]).all(-1)] = [2,1]

示例运行 -

In [15]: A
Out[15]: 
array([[[1, 2],
        [2, 1],
        [0, 0]],

       [[1, 1],
        [1, 2],
        [0, 0]]])

In [16]: A[(A == [1,2]).all(-1)] = [2,1]

In [17]: A
Out[17]: 
array([[[2, 1],
        [2, 1],
        [0, 0]],

       [[1, 1],
        [2, 1],
        [0, 0]]])