>

코드:

import numpy as np    
a = np.arange(5)   
print(a[True])    
print(a[False])

결과:

[[0 1 2 3 4]]
[]

위 코드의 경우 numpy 배열의 인덱스에 True를 전달하면 False에 빈 배열이있는 동안 완전한 배열을 반환합니다. 백그라운드에서 무슨 일이 일어나고 있습니까?


  • 답변 # 1

    예 --- 스칼라 또는 0D --- 부울 마스크를 1D 배열에 적용하면

    print(a[True])
    # [[0 1 2 3 4]]
    print(a[False])
    # []
    
    
    명확성을 위해, 특히 w.r.t. 두 번째 ( False ) 경우 모양을 쿼리하겠습니다

    print(a[True].shape)
    # (1, 5)
    print(a[False].shape)
    # (0, 5)
    
    

    이제 첫눈에 약간 수수께끼입니다. 왜 추가 차원이 필요한가요?

    부끄럽지 않은 사례부터 시작하여 이것이 왜 논리적 행동인지를 알아 봅시다 :

    x = np.arange(6).reshape(3,2)
    m2 = np.array([[True,False],[True,True],[False,True]])
    m1 = np.array([True,False,True])
    m0 = np.array(True)
    
    

    2D 배열을 만들고 2D, 1D 및 0D 마스크와 일치합니다.

    2D 마스크로 마스크하면 1D 결과가 나타납니다

    x[m2]
    # array([0, 2, 3, 5])
    
    

    1D 마스크로 만들면 전체 행이 선택되므로 2D 결과가 나타납니다

    x[m1]
    # array([[0, 1],
    #        [4, 5]])
    
    

    마스크에서 치수를 제거하면 결과에 치수가 추가된다는 것을 더 높은 차원에서도 확인할 수 있습니다.

    따라서 0D로 마스킹하는 것은 실제로 시작한 것보다 1 차원을 더 많이 얻는다는 것이 논리적입니다. 2D 마스크는 개별 포인트 (0D->목록 : 1D), 1D 마스크가 선택된 전체 행 (1D->목록 : 2D)을 선택합니다. 결과적으로, 0D 마스크는 전체 시트 (2D->이들의 목록 : 3D)를 선택하고 선택한다;기본 배열이 2D이므로 시트가 전체입니다.

    x[m0]
    # array([[[0, 1],
    #         [2, 3],
    #         [4, 5]]])
    x[m0].ndim
    # 3
    
    

    일반적으로 :

    x[m2].ndim == x.ndim - m2.ndim + 1
    # True 
    x[m1].ndim == x.ndim - m1.ndim + 1
    # True
    x[m0].ndim == x.ndim - m0.ndim + 1
    # True
    
    

  • 답변 # 2

    a be your numpy array and i.e [0,1,2,3,4] you suppose to put condition on index if condition is satisfied then it will return that element if not then discard those element. here you are putting True which mean every element satisfied this condition which is True in every case if False then non of the element satisfied. check this section

    Akash_Kumar가 대답했듯이

    부울 또는 "마스크"인덱스 배열

  • 답변 # 3

    기본적으로 부울 마스크를 적용하고 있습니다. 와이즈 비즈  " a[True] "를 의미   a 와는 달리  " a[False] "를 의미  아무데도. "

    당신이 원하는

    a
    
    
    mask = a.astype(np.bool_) # evaluates to False where a is zero # mask # array([False, True, True, True, True]) print(a[mask]) # a where a is not zero: # array([1, 2, 3, 4]) # ...mask would in this case be similar to print(a.nonzero()) # indices where a is not zero: # (array([1, 2, 3, 4], dtype=int64),)

관련 자료

  • 이전 continuous integration - githubactions ci - windows vm에서 파일을 찾는 방법은 무엇입니까?
  • 다음 apache zookeeper - ansible을 통해 없을 수있는 zk 노드의 컨텐츠 가져 오기