2009-10-26 6 views
1

I'v에는 numpy 배열이 두 개 있습니다. 첫 번째 배열에는 배열의 길이에 무작위로 분포 된 일부 0이 포함되어 있습니다.이 0을 제거하고 싶습니다.위치를 추적하면서 Python에서 배열 요소 제거

제 문제는 첫 번째 배열 요소가 0 인 인덱스 위치에서 두 번째 배열의 항목을 제거하고 싶습니다.

나는 단지 매우 성가신 for-loop만을 생각해 냈습니다. 누구든지이 일을 위해 "우아한"방법을 가지고 있습니까?

Thx!

답변

4

원하는 것은 무엇입니까? 나는 NumPy 초보자입니다.

In [1]: import numpy as np 

In [2]: a = np.array([1,2,0,3,0,4]) 

In [3]: b = np.array([1,2,3,4,5,6]) 

In [4]: b[np.where(a)] 
Out[4]: array([1, 2, 4, 6]) 

In [5]: np.where(a) 
Out[5]: (array([0, 1, 3, 5]),) 

In [6]: a[np.where(a)] 
Out[6]: array([1, 2, 3, 4]) 
+1

이것은 내가 일반적으로하는 방법이지만 더 간단한 방법이 있습니다. 'np.extract (a, b)'. 'b [np.where (a)] '와 동일합니다. – AFoglia

+0

@AFoglia, np.extract를 도입 해 주셔서 감사합니다. 그거 정말 멋지다. – sunqiang

+0

그게 바로 내가 뭘 찾았는지, 고마워! – Dzz

0

부울 색인을 사용할 수 있습니다. x! = 0은 True를 가진 부울 배열을 제공합니다. 여기서 x! = 0 false x == 0. 이 배열 (x_nozeros = x [x! = 0])을 사용하여 x 또는 y를 색인하면 x! = 0 인 요소 만 얻을 수 있습니다. 예 :

In [1]: import numpy as np 
In [2]: x = np.array([1,2,0,3,0,4]) 
In [3]: y = np.arange(1,7) 
In [4]: indx = x!=0 
In [5]: x_nozeros = x[indx] 
In [6]: y_nozeros = y[indx] 
In [7]: x_nozeros 
Out[7]: array([1, 2, 3, 4]) 
In [8]: y_nozeros 
Out[8]: array([1, 2, 4, 6])