2014-04-21 2 views
2

여기에 아주 기본적인 것이 빠진 것 같습니다. 나는 대부분 제로 (zero) 인 큰 정사각형 행렬을 가지고있다. 내가 원한 것은 0이 아닌 항목을 가진 모든 행과 열을 포함하는 행렬로 줄이는 것입니다. 예를 들어 :이 할 수있는 빠른 방법이 있나요numpy로 희소 행렬 줄이기

1 1 1 
1 1 1 
1 1 1 

:

1 1 0 1 
1 1 0 1 
0 0 0 0 
1 1 0 1 

감소해야 하는가?

+0

무엇 0이 아닌 일부 제로 항목이 행/열은 어떻습니까? 그들을 지켜? – nneonneo

+0

예. 0이 아닌 요소가 있으면 유지해야합니다. 나는 순서대로 다른 축을 가로 질러 슬라이스를 생각하고 있었다. 모든 0이있는 첫 번째 행, 그리고 모두 0 인 열. – Manbroski

답변

1

어떻게 이런 일에 대해 :

>>> arr 
array([[ 1., 1., 0., 1.], 
     [ 1., 1., 0., 1.], 
     [ 0., 0., 0., 0.], 
     [ 1., 1., 0., 1.]]) 

>>> mask = (arr==0) 

arr = arr[~np.all(mask,axis=0)] 
arr = arr[:,~np.all(mask,axis=1)] 
>>> arr 
array([[ 1., 1., 1.], 
     [ 1., 1., 1.], 
     [ 1., 1., 1.]]) 
+0

그게 내가 필요한 것입니다. 두 가지 질문. 우선,'mask = (arr! = 0)'이 ('np.all' 대'~np.all'을 가지고) 작동하지 않는 이유는 무엇입니까? 둘째, 신비한'~'은 무엇에 관한 것인가? – Manbroski

+1

@Manbroski'~'는 비트 단위 NOT 연산자에 대한 바로 가기입니다. [here] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.invert.html)를 참조하십시오. 나는 왜 np.all과 다른 마스크를 가지고 놀아서 내가 그 작업을 그대로 썼는지 보았습니다. 나는 그것을 간결하게 말로 표현할 수 있을지 확신하지 못합니다. – Daniel

+0

Google 특수 문자를 사용하기가 다소 어려워서 사용법의 의미에 당혹 스러웠습니다. 많은 감사합니다. – Manbroski