使用列表在NumPy中定义dtypes?

Tar*_*tra 3 python numpy

我刚刚遇到NumPy dtypes的问题.基本上我正在尝试创建一个如下所示的表(然后使用rec2csv保存它):

      name1   name2   name3 . . . 
name1  #       #      #
name2  #       #      #
name2  #       #      #
.
.
.
Run Code Online (Sandbox Code Playgroud)

在我尝试添加名称标签之前,已经计算了矩阵(中心的数值数组).我试过使用以下代码:

    dt = dtype({'names' : tuple(blah), 'formats' : tuple(fmt)}) 
    ReadArray = array(tuplelist, dtype=dt)
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

谢谢!

unu*_*tbu 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]
Run Code Online (Sandbox Code Playgroud)

您当前的问题是np.dtype期望格式说明符是numpy类型,例如'|S10''<f8'不是Python类型,例如strfloat.如果键入,help(np.dtype)您将看到许多np.dtypes可以指定的示例.(我只提了几个.)

请注意,np.array需要一个元组列表.这是相当特别的.

列表列表提升TypeError: expected a readable buffer object.

一个(元组元组)或一个(列表元组)引发ValueError: setting an array element with a sequence.

  • 就像一个注释:OP提供的形式的dict是一个完全有效的dtype(除了没有指定numpy类型,如你所提到的(例如np.float而不是float)).它不必是元组列表,并指定`{'names'的字典:['f0','f1'...],'formats':[np.float,np.int ,. ..]}`作为一个dtype通常更方便. (2认同)