1

マスクされていないすべての要素のインデックスを取得する方法は? 以下は、私が苦労している例です。2 つの同じサイズの numpy 配列 x と m があります。ここで、マスクされていない値の値とインデックスの両方を抽出するために、配列 m を x のマスクとして使用したいと考えています。いくつかのコードがよりよく説明すると思います

numpy 配列 x & m

>>> 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]])

ここで、m が 1 に等しい x の値を抽出したいと思います。

>>> 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)

mask が False である値のインデックスが必要です。ma ライブラリの非ゼロ関数を使用できるようになりましたが、配列にもゼロ値が含まれています。ご覧のとおり、値[1,1]がありません。

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

つまり、ゼロ以外の値だけでなく、マスクされていないすべての要素のインデックスを取得する方法は?

4

2 に答える 2

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]

乾杯!

于 2013-07-15T08:45:02.373 に答える