본문 바로가기
파이썬

파이썬 Python의 MATLAB 스타일 find () 함수

by º기록 2020. 10. 3.
반응형

MATLAB에서는 특정 조건을 충족하는 값의 인덱스를 쉽게 찾을 수 있습니다.

>> a = [1,2,3,1,2,3,1,2,3];
>> find(a > 2)     % find the indecies where this condition is true
[3, 6, 9]          % (MATLAB uses 1-based indexing)
>> a(find(a > 2))  % get the values at those locations
[3, 3, 3]

파이썬에서 이것을 수행하는 가장 좋은 방법은 무엇입니까?

지금까지 다음과 같이 생각했습니다. 값을 얻으려면 :

>>> a = [1,2,3,1,2,3,1,2,3]
>>> [val for val in a if val > 2]
[3, 3, 3]

그러나 각 값의 색인을 원한다면 조금 더 복잡합니다.

>>> a = [1,2,3,1,2,3,1,2,3]
>>> inds = [i for (i, val) in enumerate(a) if val > 2]
>>> inds
[2, 5, 8]
>>> [val for (i, val) in enumerate(a) if i in inds]
[3, 3, 3]

특히 임의의 조건 ( 'val> 2'뿐만 아니라)에 대해 Python에서이를 수행하는 더 좋은 방법이 있습니까?

NumPy에서 MATLAB 'find'에 해당하는 함수를 찾았지만 현재 해당 라이브러리에 액세스 할 수 없습니다.

 

해결 방법

 


def indices(a, func):
    return [i for (i, val) in enumerate(a) if func(val)]

a = [1, 2, 3, 1, 2, 3, 1, 2, 3]

inds = indices(a, lambda x: x > 2)

>>> inds
[2, 5, 8]

numpy를 모두로드하지 않고도 Matlab 예제에 조금 더 가깝습니다.

 

참조 페이지 https://stackoverflow.com/questions/5957470

 

 

반응형

댓글