IT이야기

numpy 값이 true인 인덱스 가져오기

cyworld 2021. 10. 5. 21:21
반응형

numpy 값이 true인 인덱스 가져오기


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

true가 있는 행이나 e값이 15보다 큰 행을 찾아야 합니다 . for 루프를 사용하여 반복할 수 있지만 numpy가 이 작업을 더 효율적으로 수행할 수 있는 방법이 있는지 알고 싶습니다.


하나 이상의 항목이 15보다 큰 행 번호를 얻으려면:

>>> np.where(np.any(e>15, axis=1))
(array([1, 2], dtype=int64),)

0이 아닌 함수 를 사용할 수 있습니다 . 주어진 입력의 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.argwhere0이 아닌 각 요소에 대한 행 반환).

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

참고:a(np.argwhere(a>4)) 에서 해당 값을 가져오는 데 사용할 수 없습니다 a. 권장되는 방법은 0차원 배열을 올바르게 처리하는 대신 a[(a>4).astype(bool)]또는 를 사용 a[(a>4) != 0]하는 것 a[np.nonzero(a>4)]입니다. 자세한 내용은 설명서 를 참조하십시오. AS는 다음의 예에서 볼 수있는, 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]])
>>> [print(i,j) for i,j in a]
0 0
0 4
3 4
4 0
4 3
4 4

ReferenceURL : https://stackoverflow.com/questions/16094563/numpy-get-index-where-value-is-true

반응형