2017-01-04 4 views
0

行列の位置を表す整数のリストを持っています(centre)。例えば、numpy行列から行を削除する

centre = [2, 50, 100, 89] 

は、私はまた、2つのnumpyの行列、XYを持っています。番号がcentreの場合は、行列からすべての行を削除する必要があります。私はこれを行うことができます:

しかし、数字はすべてインデックスのとおりになります。では、どうしたらいいですか?

答えて

2

ちょうどdelete内の1つの呼び出しを行います。

In [266]: B 
Out[266]: 
array([[ 2, 4, 6], 
     [ 8, 10, 12], 
     [14, 16, 18], 
     [20, 22, 24]]) 
In [267]: B1=np.delete(B,[1,3],axis=0) 
In [268]: B1 
Out[268]: 
array([[ 2, 4, 6], 
     [14, 16, 18]]) 

あなたの質問は少し混乱しています。私はあなたがリスト番号findのようなものではなく、何らかの種類のコンテンツではなく、インデックス番号で行を削除したいと仮定しています。

しかし、(リストのように)反復する必要がある場合は、逆順で行う必要があります。つまり、インデックス作成がうまくいきません。最初にインデックスをソートする必要があるかもしれません(np.deleteは必要ありません)。

In [269]: B1=B.copy() 
In [270]: for i in [1,3][::-1]: 
    ...:  B1=np.delete(B1,i,axis=0) 

反復なければならないリストの例:このようなリストの入力と

In [276]: B1=list(range(10)) 
In [277]: for i in [1,3,5,7][::-1]: 
    ...:  del B1[i] 
In [278]: B1 
Out[278]: [0, 2, 4, 6, 8, 9] 

=============

np.deleteが行います次のものに相当します。

In [285]: mask=np.ones((4,),bool) 
In [286]: mask[[1,3]]=False 
In [287]: mask 
Out[287]: array([ True, False, True, False], dtype=bool) 
In [288]: B[mask,:] 
Out[288]: 
array([[ 2, 4, 6], 
     [14, 16, 18]])