2017-05-17 6 views
2

で私は現在、アレイを平坦化し、それを回していリストに基づいてnumpyのアレイ割当1と0の値numpyの配列に値がリスト

input_array = [[0,4,6],[2,1,1],[6,6,9]] 
list=[9,4] 
... 
output_array = [[0,1,0],[0,0,0],[0,0,1]] 

をフィルタリングする方法を探していますされているかどうかに応じてリストとバック。非常にunpythonicルックス:

list=[9,4] 
    shape = input_array.shape 
    input_array = input_array.flatten() 
    output_array = np.array([int(i in list) for i in input_array]) 
    output_array = output_array.reshape(shape) 

答えて

2

我々は試合のマスクを取得するためにnp.in1dを使用することができます。さて、np.in1dは処理の前に入力を1Dに平らにします。したがって、出力は2Dに再整形され、次に0s1sの出力の場合はintに変換されます。

したがって、実装は次のようになります -

np.in1d(input_array, list).reshape(input_array.shape).astype(int) 

サンプル実行 -

In [40]: input_array 
Out[40]: 
array([[0, 4, 6], 
     [2, 1, 1], 
     [6, 6, 9]]) 

In [41]: list=[9,4] 

In [42]: np.in1d(input_array, list).reshape(input_array.shape).astype(int) 
Out[42]: 
array([[0, 1, 0], 
     [0, 0, 0], 
     [0, 0, 1]]) 
関連する問題