返回零和非零的未屏蔽元素的索引

时间:2013-07-15 07:26:05

标签: python numpy

如何获取所有未屏蔽元素的索引?以下是我正在努力的一个例子。我有两个相同大小的numpy数组,x和m。现在我想使用数组m作为x上的掩码来提取未掩盖值的值和索引。我认为一些代码会更好地解释

numpy array x&米

>>> x = np.array([[3,5,9],[6,0,7],[2,3,4]])
>>> x
array([[3, 5, 9],
       [6, 0, 7],
       [2, 3, 4]])
>>> m = np.array([[1,1,2],[2,1,1],[2,1,2]])
>>> m
array([[1, 1, 2],
       [2, 1, 1],
       [2, 1, 2]])

现在我想提取x的值,其中m等于1

>>> mo = ma.array(m,mask=(m<>1))
>>> mo
masked_array(data =
 [[1 1 --]
 [-- 1 1]
 [-- 1 --]],
             mask =
 [[False False  True]
 [ True False False]
 [ True False  True]],
       fill_value = 999999)

>>> xm = ma.masked_array(x,mask=mo.mask, dtype=int)
>>> xm
masked_array(data =
 [[3 5 --]
 [-- 0 7]
 [-- 3 --]],
             mask =
 [[False False  True]
 [ True False False]
 [ True False  True]],
       fill_value = 999999)

我希望掩码为False的值的索引。现在我可以使用ma库中的非零函数,但我的数组也包含零值。可以看出,缺少值[1,1]

>>> xmindex = np.transpose(ma.MaskedArray.nonzero(xm))
>>> xmindex
array([[0, 0],
       [0, 1],
       [1, 2],
       [2, 1]])

简而言之,如何获取所有未屏蔽元素的索引而不仅仅是非零值?

2 个答案:

答案 0 :(得分:3)

我会尝试使用numpy.where():

,如上所述
x = np.array([[3,5,9],[6,0,7],[2,3,4]])
m = np.array([[1,1,2],[2,1,1],[2,1,2]])
indices = np.where(m == 1)  # indices contains two arrays, the column and row indices
values = x[indices]

干杯!

答案 1 :(得分:0)

这是一种可能性。但我几乎可以肯定它太迂回了。

>>> xmindex = np.transpose(np.concatenate(((ma.MaskedArray.nonzero(xm==0), 
              ma.MaskedArray.nonzero(xm!=0))),axis=1))
>>> xmindex
array([[1, 1],
       [0, 0],
       [0, 1],
       [1, 2],
       [2, 1]])

然后排序

>>> xmindex = xmindex[np.lexsort((xmindex[:,1],xmindex[:,0]))]
>>> xmindex
array([[0, 0],
       [0, 1],
       [1, 1],
       [1, 2],
       [2, 1]])