큰 numpy
행렬 M
이 있습니다. 행렬의 행 중 일부는 모든 요소가 0이고 해당 행의 인덱스를 가져와야합니다. 내가 고려하고있는 순진한 접근법은 행렬의 각 행을 반복하고 각 요소를 확인하는 것입니다. 그러나 numpy
을 사용하여이를 수행하는 더 빠르고 더 빠른 접근 방법이 있다고 생각합니다. 네가 도울 수 있기를 바란다.numpy가있는 행렬에서 모든 요소가 0으로 지정된 행 찾기
11
A
답변
16
한 가지 방법이 있습니다. import numpy as np
을 사용하여 numpy를 가져온 것으로 가정합니다.
In [20]: a
Out[20]:
array([[0, 1, 0],
[1, 0, 1],
[0, 0, 0],
[1, 1, 0],
[0, 0, 0]])
In [21]: np.where(~a.any(axis=1))[0]
Out[21]: array([2, 4])
은이 답변에 약간의 변화는 다음과 같습니다 How to check that a matrix contains a zero column?
여기에 무슨 일이 일어나고 있는지의 :
any
방법은 배열의 값은 "truthy"인 경우 True를 반환합니다. 0이 아닌 수는 True로 간주되고 0은 False로 간주됩니다. 인수 axis=1
을 사용하여 메소드가 각 행에 적용됩니다. 예 a
를 들어, 우리는이 :
In [32]: a.any(axis=1)
Out[32]: array([ True, True, False, True, False], dtype=bool)
그래서 각 값은 해당 행이 0이 아닌 값을 포함하고 있는지 여부를 나타냅니다.
~
연산자는 이진 "없습니다"또는 보완 :
In [33]: ~a.any(axis=1)
Out[33]: array([False, False, True, False, True], dtype=bool)
(. 같은 결과를 제공하는 다른 표현이 (a == 0).all(axis=1)
입니다)
행 인덱스를 얻으려면, 우리는 where
기능을 사용합니다. 이 인수가 True 인 인덱스를 반환 where
은 하나의 배열을 포함하는 튜플을 반환
In [34]: np.where(~a.any(axis=1))
Out[34]: (array([2, 4]),)
하는 것으로. where
은 n 차원 배열에서 작동하므로 항상 튜플을 반환합니다. 우리는 그 튜플에 단일 배열을 원합니다.
In [35]: np.where(~a.any(axis=1))[0]
Out[35]: array([2, 4])
관련 문제
- 1. numpy 행렬에서 일치하는 행 찾기
- 2. 인접 행렬에서 모든 경로 찾기
- 3. 희소 행렬에서 행 단위 최소값 찾기
- 4. MATLAB 행렬에서 가장 반복되는 행 찾기
- 5. 0으로 채워지는 모든 파일 찾기
- 6. 행렬에서 행 삭제 Matlab
- 7. 프롤로그 - 행렬에서 단어 찾기
- 8. 조합 행렬에서 특정 행 추출
- 9. 행렬에서 가장 큰 원소 찾기
- 10. 관련없는 모든 행 찾기
- 11. 모든 틸트가있는 행 찾기
- 12. 찾기 모든 연속적인 요소가 제로
- 13. 지정된 인덱스를 0으로 설정하십시오.
- 14. 행렬에서 최대 값의 행 및 열 인덱스 찾기
- 15. 벡터에 해당하는 행렬에서 행 식별
- 16. 접힌 3D 행렬에서 대각선 찾기
- 17. 목록의 행렬에서 올바른 재귀 순서 찾기
- 18. jQuery : 모든 숨겨진 행 찾기
- 19. - vs - = numpy가있는 연산자
- 20. mXn 행렬에서 가능한 모든 고유 한 경로 찾기
- 21. MATLAB 지정된 값에 가장 가까운 행 및 열 인덱스 찾기
- 22. R : 요소가 포함 된리스트의 모든 벡터 찾기
- 23. 주어진 색상으로 서식이 지정된 모든 텍스트 찾기
- 24. MATLAB에서 유사한 행 찾기
- 25. C++ : 배열 요소가 0으로 설정되었습니다.
- 26. 자정과 지정된 날짜 사이에있는 모든 행 선택
- 27. 지정된 시간에 퓨전 테이블의 모든 행 삭제
- 28. 행렬에서 일치하는 행을 찾으십시오.
- 29. 요소가 지정된 수
- 30. 행렬에서 모든 최대 값을 찾으십시오
정말 멋진 답변입니다. 감사합니다. – holografix