2012-09-05 3 views
2

4 열 및 많은 행 (> 10000,이 숫자는 고정되지 않음)이있는 2D numpy 배열이 있습니다.i 번째 필드의 값으로 numpy 배열을 분할하는 방법은 무엇입니까?

열 중 하나의 값으로 n 하위 배열을 만들어야합니다. 내가 찾은 가장 가까운 질문은 How slice Numpy array by column value이었습니다. 그럼에도 불구하고 필드의 정확한 값을 알지 못합니다. (그들은 플로트이고 필요로하는 모든 파일에서 변경됩니다.) 그러나 나는 20을 넘지 않습니다.

줄 단위로 읽을 수 있다고 생각합니다. 서로 다른 값을 구한 다음 나누기를 수행합니다. 그러나이 작업을 수행하는보다 효율적인 방법이 있다고 생각합니다.

감사합니다.

답변

0

편리 다차원 슬라이스를 사용할 수 있습니다

import numpy as np 

# just creating a random 2d array. 
a = (np.random.random((10, 5)) * 100).astype(int) 
print a 
print 

# select by the values of the 3rd column, selecting out more than 50. 
b = a[a[:, 2] > 50] 

# showing the rows for which the 3rd column value is > 50. 
print b 

또 다른 예를 들어, 당신이 코멘트에서 요구하는에 가까운 (?) :이 행을 선택

import numpy as np 

# just creating a random 2d array. 
a = np.random.random((10000, 5)) * 100 
print a 
print 

# select by the values of the 3rd column, selecting out more than 50. 
b = a[a[:, 2] > 50.0] 
b = b[b[:, 2] <= 50.2] 

# showing the rows for which the 3rd column value is > 50. 
print b 

하는 제 3 열의 값은 (50, 50.2)입니다.

+0

하지만 값은 내가 판다를 사용하여 시도하지만 난이 길을 잃었다 매우 가깝습니다. – user1621048

+0

@ user1621048 정말 바뀌는 것이 무엇인지 모르겠지만 다른 예를 조금 더 가깝게 추가했습니다. –

1

해당 작업에 더 구체적으로 DataFrame의 groupby 메서드를 사용할 수 있습니다. 다음은 몇 가지 예제 코드입니다 :

import numpy as np 
import pandas as pd 

# generate a random 20x5 DataFrame 
x=np.random.randint(0,10,100) 
x.shape=(20,5) 
df=pd.DataFrame(x) 

# group by the values in the 1st column 
g=df.groupby(0) 

# make a dict with the numbers from the 1st column as keys and 
# the slice of the DataFrame corresponding to each number as 
# values of the dict 
d={k:v for (k,v) in g} 

일부 샘플 출력 : 잘

In [74]: d[3] 
Out[74]: 
    0 1 2 3 4 
2 3 2 5 4 3 
5 3 9 4 3 2 
12 3 3 9 6 2 
16 3 2 1 6 5 
17 3 5 3 1 8 
+0

질문은 판다가 아니라 멍청이에 관한 것입니다. pandas는 numpy보다 속도와 메모리 단점이 있습니다. –

관련 문제