복붙노트

[PYTHON] 0이 아닌 (a), (a)와 argwhere (a)의 차이점. 어느 것을 사용해야합니까?

PYTHON

0이 아닌 (a), (a)와 argwhere (a)의 차이점. 어느 것을 사용해야합니까?

Numpy, nonzero (a)에서 (a)와 argwhere (a)는 numpy 배열로, 배열의 0이 아닌 인덱스를 반환하는 것처럼 보입니다. 이 세 건의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.0이 아니며 arg는 두 요소 모두 배열에서 요소가 참인 위치에 대한 정보를 제공합니다. 여기서는 게시 한 양식에서 0이 아닌 숫자와 동일한 방식으로 작동하지만 두 번째 형식이 있습니다.

    0이 아니며 arg는 두 요소 모두 배열에서 요소가 참인 위치에 대한 정보를 제공합니다. 여기서는 게시 한 양식에서 0이 아닌 숫자와 동일한 방식으로 작동하지만 두 번째 형식이 있습니다.

    np.where(mask,a,b)
    

    대략적으로 조건식의 numpy "ufunc"버전으로 생각할 수 있습니다.

    a[i] if mask[i] else b[i]
    

    (a와 b의 적절한 방송과 함께).

    0이 아니고 arg가있는 한 개념적으로 다릅니다. 0이 아닌 값은 인덱싱에 사용할 수있는 객체를 반환하도록 구성됩니다. 0이 희박한 경우 전체 부울 마스크를 만드는 것보다 더 가벼울 수 있습니다.

    mask = a == 0  # entire array of bools
    mask = np.nonzero(a)
    

    이제이 마스크를 사용하여 다른 배열 등을 색인 할 수 있습니다. 그러나 그대로, 0 요소에 해당하는 색인을 개념적으로 파악하는 것은 그리 좋지 않습니다. 그것은 argwhere가 들어오는 곳입니다.

  2. ==============================

    2.별도의 편의 함수를 사용하여 다른 결과를 변환하는 유용성에 대해서는 언급 할 수 없지만 대 0이 아닌 곳에 대해서는 언급 할 수 있습니다. 그것은 가장 간단한 유즈 케이스이며, 실제로 0이 아닌 것과 같습니다.

    별도의 편의 함수를 사용하여 다른 결과를 변환하는 유용성에 대해서는 언급 할 수 없지만 대 0이 아닌 곳에 대해서는 언급 할 수 있습니다. 그것은 가장 간단한 유즈 케이스이며, 실제로 0이 아닌 것과 같습니다.

    >>> np.where(np.array([[0,4],[4,0]]))
    (array([0, 1]), array([1, 0]))
    >>> np.nonzero(np.array([[0,4],[4,0]]))
    (array([0, 1]), array([1, 0]))
    

    또는

    >>> a = np.array([[1, 2],[3, 4]])
    >>> np.where(a == 3)
    (array([1, 0]),)
    >>> np.nonzero(a == 3)
    (array([1, 0]),)
    

    어떤 조건이 참이면 배열 a의 요소를 선택하고 해당 조건이 거짓 일 때 배열 b의 요소를 선택하려는 경우 0이 아닌 값과 다릅니다.

    >>> a = np.array([[6, 4],[0, -3]])
    >>> b = np.array([[100, 200], [300, 400]])
    >>> np.where(a > 0, a, b)
    array([[6, 4], [300, 400]])
    

    다시 말하지만, 왜 그들이 0이 아닌 기능을 어디에 추가했는지 설명 할 수는 없지만 두 가지가 다른 점을 적어도 설명합니다.

    수정 : 첫 번째 예제를 고정 ... 내 논리가 이전에 잘못되었습니다.

  3. from https://stackoverflow.com/questions/15976697/difference-between-nonzeroa-wherea-and-argwherea-when-to-use-which by cc-by-sa and MIT license