2014-04-08 2 views
2

나는 3 개의 열을 갖는 numpy 배열을가집니다. 이 10 개의 행이 있지만, 여기에 처음 두를 수 있습니다 :numpy 열을 두 개의 열로 나누고 원래 배열로 유지하십시오.

burger flipper part time 12-5.00 
spam flipper full time 98-10.00 

문제는, 작업 코드 (12 및 98) 어떻게 든 시간당 임금 (5.00 및 10.00)와 함께 입수했습니다.

두 가지로이 열을 분할하고, 그 필요를 제거하는 NumPy와의 간단한 방법이 '-'와 같이 문자 : 사전에

burger flipper part time 12 5.00 
spam flipper full time 98 10.00 

감사합니다. hstack 사용하여 일을

답변

2

한 가지 방법 :

import numpy as np 
a = np.array([['burger flipper', 'part time', '12-5.00'], 
      ['spam flipper', 'full time', '98-10.00']]) 
a = np.hstack((a[:,:2], map(lambda x: x.split('-'), a[:,2]))) 
print a 

출력은 :

[['burger flipper' 'part time' '12' '5.00'] 
['spam flipper' 'full time' '98' '10.00']] 

설명의 비트 :

  1. 기능 numpy.hstack 당신이 할 수 있습니다 여러 개의 numpy 배열을 가로로 쌓습니다. 예를 들어

    np.hstack((a[:,[0,1]], a[:,[2]])) 
    

    은 3 열로 원래 배열 a을 생성합니다. a[:,[2]]에 대괄호를 사용하면 [a:,2]은 1 차원 배열 (len(a[:,2].shape) = 1)을 생성하므로 작동하지 않습니다.

  2. 문은 배열의 문제가있는 열 (즉, 3 열)에 lambda x: x.split('-') 함수를 적용합니다. 람다 함수를 호출 할 때마다 ['12', '5.00']과 같이 분리 된 작업 코드와 임금을 포함하는 목록이 반환됩니다. 따라서 map 문은 [['12', '5.00'], ['98', '10.00']]과 같은 목록의 목록을 생성합니다. 이것은 hstack에 공급 될 때 2 개의 열이있는 질적 인 배열로 변환 될 수 있습니다.

코드 당신이 결국 원하는 것과 유사한 배열의 결과 map을 통해 얻은 목록의 목록, 원래 배열의 hstack 처음 두 열입니다.

+2

'map'과'lambda' 대신'np.char.split (a [:, 2], '-')'를 사용할 수 있습니다. – askewchan

+0

음 ... 나는 불쾌감을 느끼지 않는다. 그러나 약간의 코드를 설명해 주시겠습니까? 나는 numpy와 너무 좋지 않다. 그리고 이것은 꽤 어려워 보인다. –

+0

@ MattO'Brien 문제는 없습니다. 편집 된 답변을 참조하십시오. –

관련 문제