numpy 값이 참인 인덱스 가져오기
>>> ex=np.arange(30)
>>> e=np.reshape(ex,[3,10])
>>> e
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])
>>> e>15
array([[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, True, True, True,
True],
[ True, True, True, True, True, True, True, True, True,
True]], dtype=bool)
참 또는 행이 있는 행을 찾아야 합니다.e
그 값이 15보다 큰.for 루프를 사용하여 반복할 수 있지만 numpy가 이를 더 효율적으로 수행할 수 있는 방법이 있는지 알고 싶습니다.
하나 이상의 항목이 15보다 큰 행 번호를 가져오려면:
>>> np.where(np.any(e>15, axis=1))
(array([1, 2], dtype=int64),)
기능을 사용할 수 있습니다.지정된 입력의 0이 아닌 인덱스를 반환합니다.
이지 웨이
>>> (e > 15).nonzero()
(array([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))
인덱스를 더 깨끗하게 보려면 사용transpose
방법:
>>> numpy.transpose((e>15).nonzero())
[[1 6]
[1 7]
[1 8]
[1 9]
[2 0]
...
나쁘지 않은 방법
>>> numpy.nonzero(e > 15)
(array([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))
아니면 깨끗한 방법:
>>> numpy.transpose(numpy.nonzero(e > 15))
[[1 6]
[1 7]
[1 8]
[1 9]
[2 0]
...
간단하고 깨끗한 방법: 사용np.argwhere
지수를 차원이 아닌 요소별로 그룹화하는 방법np.nonzero(a)
(즉,np.argwhere
0이 아닌 각 요소에 대한 행을 반환합니다.
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.argwhere(a>4)
array([[5],
[6],
[7],
[8],
[9]])
np.argwhere(a)
와 거의 같습니다.np.transpose(np.nonzero(a))
하지만 0-d 배열에 대한 올바른 모양의 결과를 생성합니다.
참고: 사용할 수 없습니다.a(np.argwhere(a>4))
에서 해당 값을 가져옵니다.a
권장되는 방법은 다음과 같습니다.a[(a>4).astype(bool)]
또는a[(a>4) != 0]
보다는a[np.nonzero(a>4)]
0-D 배열을 올바르게 처리하기 때문입니다.자세한 내용은 설명서를 참조하십시오.다음 예에서 볼 수 있듯이,a[(a>4).astype(bool)]
그리고.a[(a>4) != 0]
으로 단순화할 수 있습니다.a[a>4]
.
다른 예:
>>> a = np.array([5,-15,-8,-5,10])
>>> a
array([ 5, -15, -8, -5, 10])
>>> a > 4
array([ True, False, False, False, True])
>>> a[a > 4]
array([ 5, 10])
>>> a = np.add.outer(a,a)
>>> a
array([[ 10, -10, -3, 0, 15],
[-10, -30, -23, -20, -5],
[ -3, -23, -16, -13, 2],
[ 0, -20, -13, -10, 5],
[ 15, -5, 2, 5, 20]])
>>> a = np.argwhere(a>4)
>>> a
array([[0, 0],
[0, 4],
[3, 4],
[4, 0],
[4, 3],
[4, 4]])
>>> for i,j in a: print(i,j)
...
0 0
0 4
3 4
4 0
4 3
4 4
>>>
선호합니다np.flatnonzero(arr)
에게nonzero()
행 IDx만 필요한 경우 옵션을 선택합니다. arr.nonzero()
작동하지만 배열 대신 튜플을 반환합니다. flatnonzero()
와 동등합니다.np.nonzero(np.ravel(arr))[0]
.
댓글에 나온 것처럼.np.where()
NumPy 문서에 의해 차단됩니다.
언급URL : https://stackoverflow.com/questions/16094563/numpy-get-index-where-value-is-true
'programing' 카테고리의 다른 글
파이썬의 다른 함수 안에서 호출자 함수 이름을 가져오는 중? (0) | 2023.07.19 |
---|---|
산점도 점을 선으로 연결 - Python (0) | 2023.07.19 |
복제 시 Git 하위 모듈 폴더 비우기 (0) | 2023.07.19 |
Firebase 스토리지 비디오 스트리밍 (0) | 2023.07.19 |
matplotlib 플롯의 왼쪽 위 모서리에 텍스트 삽입 (0) | 2023.07.19 |