【问题标题】:Define dtypes in NumPy using a list?使用列表在 NumPy 中定义 dtypes?
【发布时间】:2010-08-04 21:51:53
【问题描述】:

我只是遇到了 NumPy dtypes 的问题。本质上,我正在尝试创建一个如下所示的表(然后使用 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

谁能帮忙?

谢谢!

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    以下代码可能会有所帮助:

    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 期望格式说明符是numpy 类型,例如'|S10''&lt;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 通常更方便。
    • @Joe, 'f0', 'f1' 可以作为索引吗?我通常有一个 col 日期或字符串,其余的是浮点数。例如:'foo', 1,2,2,44,3 或 22,2,2,2,2,'3/2/2001' 什么是最好的 dtype 解决方案?
    • +1 表示当数据输入不同于元组列表时引发的异常,我经常碰到这种情况。
    猜你喜欢
    • 2012-11-19
    • 2017-05-20
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2016-12-24
    • 2019-01-30
    相关资源
    最近更新 更多