2010-08-04 3 views
3

NumPy dtypes에 문제가 있습니다. 기본적으로 나는 다음과 같은 테이블을 생성 (다음 rec2csv를 사용하여 저장)하기 위해 노력하고있어 :목록을 사용하여 NumPy에 dtypes를 정의 하시겠습니까?

내가 이름을 추가하기 전에 매트릭스 (중앙에 숫자 배열), 이미 계산

 name1 name2 name3 . . . 
name1 #  #  # 
name2 #  #  # 
name2 #  #  # 
. 
. 
. 
태그. 나는 다음과 같은 코드를 사용하려고했습니다 :

tuplelist 행의 목록입니다
dt = dtype({'names' : tuple(blah), 'formats' : tuple(fmt)}) 
    ReadArray = array(tuplelist, dtype=dt) 

(행 즉 [이름 1, #는 #는 #이 ...]), 어쩌구 문자열의 목록입니다 (예 : 이름은 blah = ['name1', 'name2', ...])이고 fmt는 형식 목록 (예 : fmt = [str, float, float, ...])입니다.

Traceback (most recent call last): 

    File "<stdin>", line 1, in <module> 
    File "table_calc_try2.py", line 152, in table_calc_try2 
    dt = dtype({'names' : tuple(blah), 'formats' : tuple(fmt)}) 
TypeError: data type not understood 

누군가가 도와 드릴까요 :

내가 갖는이 오류는 다음과 같다?

감사합니다.

답변

12

다음 코드는 도움이 될 수 있습니다 :

import numpy as np 

dt = np.dtype([('name1', '|S10'), ('name2', '<f8')]) 
tuplelist=[ 
    ('n1', 1.2), 
    ('n2', 3.4),  
    ] 
arr = np.array(tuplelist, dtype=dt) 

print(arr['name1']) 
# ['n1' 'n2'] 
print(arr['name2']) 
# [ 1.2 3.4] 

귀하의 즉각적인 문제는 np.dtype는 형식 지정은 str 또는 float 같은 NumPy와 종류, 같은 '|S10' 또는 '<f8'하지 파이썬 유형이 될 것으로 예상이었다. help(np.dtype)을 입력하면 np.dtypes을 지정하는 방법에 대한 많은 예가 표시됩니다. (몇 가지만 언급했습니다.)

np.array는 튜플 목록을 필요로합니다. 그것은 그것에 대해 오히려 특별합니다.

목록 목록은 TypeError: expected a readable buffer object을 발생시킵니다.

A (터플의 튜플) 또는 (터플의 목록)은 ValueError: setting an array element with a sequence을 발생시킵니다.

+2

메모와 마찬가지로 OP에서 제공 한 양식의 dict은 완벽하게 유효한 dtype입니다 (nump 유형을 지정하지 않은 것 (예 : float 대신 np.float)). 튜플 목록 일 필요는 없으며'{ 'names': [ 'f0', 'f1'...], 'formats'의 사전을 지정할 필요는 없습니다. [np.float, np.int,. ..]}'dtype은 훨씬 더 편리합니다. –

+0

@Joe, 'f0', 'f1'은 색인이 될 수 있습니까? 나는 일반적으로 한 col 날짜 또는 문자열, 나머지는 수레 있습니다. 예 : 'foo', 1,2,2,44,3 또는 22,2,2,2,2, '3/2/2001'이 최고의 dtype 솔루션입니다. – Merlin

+0

+1 데이터 입력이 튜플 목록과 다른 경우에 발생하는 예외를 지적하기 위해 +1이 너무 자주 발생했습니다. – Evert

관련 문제