2011-08-31 5 views
0

numpy/scipy로 놀고있어 설명서에서 기능을 찾는 데 어려움을 겪고 있습니다. 도움이 필요하면 도움이 될지 궁금합니다.열 값과 변수를 기반으로 한 수의 배열/행렬을 합성 하시겠습니까?

2 열 및 k 행으로 numpy 배열이있는 경우 한 열은 숫자 표시기 (예 : 2 = 남성, 1 = 여성, 0 = 알 수 없음) 역할을하지만 두 번째 열은 아마도 값 또는 점수 목록입니다.

표시기 0, 1, 그리고 마지막으로 2의 모든 행에 대한 값의 표준 편차 (평균값 또는 기타 값, 단지 함수 적용)를 찾고 싶다고합시다. 나를 위해 이것을 합성하는 미리 정의 된 함수가 있습니까? R에서는 'plyr'패키지에서 해당 항목을 찾을 수 있습니다. numpy/scipy에 해당하는 항목이 있습니까? 아니면이 배열의 마스크를 만든 다음이 마스크를 통해 필터링 한 다음 내 함수를 적용하고 있습니까? numpy 방법은 무엇입니까?

항상 도움을 주셔서 감사합니다.

답변

4

, 당신은 데이터 집합이 같은이이 상황에서

In [79]: x=np.random.randint(0,3,size=100) 

In [80]: y=np.random.randint(0,100,size=100) 

In [81]: d=np.vstack([x,y]).T 

In [88]: print d[:5,:] 
[[ 0 43] 
[ 1 60] 
[ 2 60] 
[ 1 4] 
[ 0 30]] 

numpy.unique 고유의 "키"값의 배열 생성 할 수 있습니다 :

In [82]: idx=np.unique(d[:,0]) 

In [83]: print idx 
[0 1 2] 

과 사람들을

[113]: g=(d[np.where(d[:,0]==val),1].std() for val in idx) 

발전기 g는 S를 방출한다 : 값이 같은 식 발전기를 구동하는 데 사용 색인의 각 항목과 일치하는 d에있는 모든 항목의 표준 편차.

In [114]: print np.vstack([idx,np.fromiter(g,dtype=np.float)]).T 
[[ 0.   26.87376385] 
[ 1.   29.41046084] 
[ 2.   24.2477246 ]] 

참고 적재시 마지막 단계에서 부동 소수점의 열쇠 변환, 당신은 당신의 데이터에 따라하는하지만 난에 대한 그냥 한 것을이 싶지 않을 수도있다 : numpy.fromiterator 다음 결과를 수집하는 데 사용할 수 있습니다 "좋은"최종 결과를 게시하는 설명 목적.

2

마스크 된 배열 작업을 사용할 수 있습니다.

http://docs.scipy.org/doc/numpy/reference/maskedarray.html#maskedarray 마스크를 만들려면, 당신은 너무처럼 numpy.where 기능을 사용할 수 있습니다

male_mask = numpy.where(a[:,0]==2, False, True) 
female_mask = numpy.where(a[:,0]==1, False, True) 

을 그리고, numpy.ma에서 특수 기능을 사용하는 기억 : http://docs.scipy.org/doc/numpy/reference/routines.ma.html

male_average = numpy.ma.average(ma.array(a[:,1], mask=male_mask)) 

수정 : 실제로는 다음과 같이 작동합니다.

numpy.ma.average(ma.array(a[:,1], mask=a[:,0]!=value)) 
나는 당신의 설명을 이해한다면
0

탈론 내 대답은 여기 꽤 좋습니다. 난 그냥 당신이 몇 가지 간단한 슬라이싱 기법과 화려한 색인에 더 많거나 적은 동일한 결과를 얻을 수 있습니다 지적 것이다 : 나는 너무 발전기 솔루션을 좋아

k = 100 #k rows of data 
x = np.random.randint(0, 3, k) 
y = np.random.randint(0, 100, k) 
d = np.c_[x,y] 

for i in xrange(3): 
    print 'std of {0} group = {1}'.format(i, d[where(d.T[0] == i)].T[1].std()) 

하지만 NumPy와의 슬라이스와 화려한 색인 마법의 일부 알고있는 강력한이다 통역사가 손을 대고있을 때 손끝에있는 도구!

관련 문제