2017-01-04 7 views
0

행렬의 위치를 ​​나타내는 정수 목록이 있습니다 (centre). 예를 들어, numpy 행렬에서 행 제거

centre = [2, 50, 100, 89] 

는 또한 두 NumPy와 행렬, XY 있습니다. 숫자가 centre 인 경우 행렬에서 모든 행을 삭제해야합니다. 이 작업을 수행 할 수 있습니다 :

그러나 숫자는 모두 색인 밖으로 나가기 때문에 모두 종료됩니다. 그래서, 어떻게해야합니까?

답변

2

는 그냥 delete에서 하나의 호출을 수행

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