Определить dtypes в NumPy, используя список? - PullRequest
3 голосов
/ 05 августа 2010

У меня просто проблема с dumpes NumPy.По сути, я пытаюсь создать таблицу, которая выглядит следующим образом (и затем сохранить ее с помощью rec2csv):

      name1   name2   name3 . . . 
name1  #       #      #
name2  #       #      #
name2  #       #      #
.
.
.

Матрица (числовой массив в центре), уже вычисляется, прежде чем я пытаюсь добавитьтеги имен.Я попытался использовать следующий код:

    dt = dtype({'names' : tuple(blah), 'formats' : tuple(fmt)}) 
    ReadArray = array(tuplelist, dtype=dt)

, где tuplelist - это список строк (то есть строка [name1, #, #, # ...]), blah - это список строк(т.е. имена, blah = ['name1', 'name2', ...]), а fmt - это список формата s (то есть 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

Может кто-нибудь помочь?

Спасибо!

1 Ответ

12 голосов
/ 05 августа 2010

Следующий код может помочь:

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 ожидает, что в качестве спецификаторов формата будут использоваться типовые числа, такие как '|S10' или '<f8', а не типы Python, например str или float. Если вы введете help(np.dtype), вы увидите много примеров того, как можно указать np.dtypes. (Я упомянул только несколько.)

Обратите внимание, что np.array ожидает список кортежей. Это довольно специфично в этом.

Список списков поднимается TypeError: expected a readable buffer object.

A (кортеж кортежей) или (кортеж списков) повышает ValueError: setting an array element with a sequence.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...