使用Dtypes投掷错误的Numpy数组

时间:2017-02-14 18:09:29

标签: python numpy

我正在做一些相当简单的事情,我正在尝试将列表列表转换为np.array:

rows = [[1, 'None', 'None', 0, 0, 'None', 0, 0], 
        [2, 'None', 'None', 0, 0,    'None', 0, 0], 
        [3, 'None', 'None', 0, 0, 'None', 0, 0], 
        [4, 'None', 'None', 0, 0, 'None', 0, 0], 
        [5, 'None', 'None', 0, 0, 'None', 0, 0]]

dtypes = np.dtype(
    [
        ('_ID', np.int),
        ('SOURCE_LILST', '|S1024'),
        ('PRI_SOURCE', '|S256'),
        ('PRI_SOURCE_CNT', np.int32),
        ('PRI_SOURCE_PER', np.float64),
        ('SEC_SOURCE', '|S256'),
        ('SEC_SOURCE_CNT', np.int32),
        ('SEC_SOURCE_PER', np.float64)
    ]
)
array = np.array(rows, dtypes) # error raised

任何人都可以看到这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:2)

您的rows对象应该是元组列表,而不是列表列表:

rows = [(1, 'None', 'None', 0, 0, 'None', 0, 0), 
        (2, 'None', 'None', 0, 0,    'None', 0, 0), 
        (3, 'None', 'None', 0, 0, 'None', 0, 0), 
        (4, 'None', 'None', 0, 0, 'None', 0, 0), 
        (5, 'None', 'None', 0, 0, 'None', 0, 0)]

dtypes = np.dtype(
    [
        ('_ID', np.int),
        ('SOURCE_LILST', '|S1024'),
        ('PRI_SOURCE', '|S256'),
        ('PRI_SOURCE_CNT', np.int32),
        ('PRI_SOURCE_PER', np.float64),
        ('SEC_SOURCE', '|S256'),
        ('SEC_SOURCE_CNT', np.int32),
        ('SEC_SOURCE_PER', np.float64)
    ]
)
array = np.array(rows, dtypes) # no error raised

一些额外的提示:

  1. 尽量简化问题,找出问题所在。在这种情况下,您可以删除除一个列之外的所有列,因此删除了dtype,并且仍然可以看到问题。这有助于消除可能的错误,例如您是否正确指定了所有这些字符串等。
  2. Google your problem,然后开始创建问题。
  3. 在询问有关您收到错误的原因的问题时,请提供错误消息 - 或者至少包含一些缩短版本。
  4. 更一般地说,请阅读this。这不仅对提出更好的问题很有帮助,而且在你甚至可以提出问题之前找出问题也是一种有用的方法。