【问题标题】:FIeld format conversion error in numpy arraynumpy数组中的字段格式转换错误
【发布时间】:2020-10-09 07:09:18
【问题描述】:

我正在尝试创建一个由数据数组组成的 numpy 数组,其中每个数据点是另一个长度为 5 的数组。我试图通过设置第一个数据(即五个元素的数组)并设置每种数据类型的名称和格式使用以下代码:

DTYPE = [('t_start', 'S32'), ('t_end', 'S32'), ('mac1', 'S32'), ('mac2', 'S32'), ('rss', np.float)]

np.array([ ['2020-10-07 09:20:00', '2020-10-07 09:43:20', 'b8:9a:2a:06:68:f5', 'b8:9a:2a:06:68:f5', '10.501'] ], dtype=DTYPE)

这里一定有一些非常明显的东西我错过了,因为这个(简单?)代码发出以下异常

ValueError: could not convert string to float: '2020-10-07 09:20:00'

任何关于这里发生的事情的提示将不胜感激。

【问题讨论】:

  • 您将 DTYPE 传递给 np.array 并在 DTYPE 中调用 np.float 所以 python 会尝试将 2020-10-07 09:20:00 转换为 float ,这对 python 来说是不可能的跨度>
  • @Hosseinreza 谢谢!但是,如果我使用'f8'而不是np.float,错误仍然存​​在

标签: python python-3.x numpy


【解决方案1】:

我无法重现您的确切错误消息,但看起来有两个问题:您的内部列表应该是一个元组,并且您应该使用U(Unicode 字符串)代替格式中的S说明符(documentation 表示不推荐使用 S(零终止字节)):

import numpy as np

DTYPE = [('t_start', 'U32'), ('t_end', 'U32'), ('mac1', 'U32'), 
         ('mac2', 'U32'), ('rss', np.float)]

values = [('2020-10-07 09:20:00', '2020-10-07 09:43:20', 
           'b8:9a:2a:06:68:f5', 'b8:9a:2a:06:68:f5', '10.501')]

arr = np.array(values, dtype=DTYPE)

print(arr.shape)

print(arr[0]['t_end'])  # 2020-10-07 09:43:20
print(type(arr[0]['t_end']))  # <class 'numpy.str_'>

print(arr[0]['rss'])  # 10.501
print(type(arr[0]['rss']))  # <class 'numpy.float64'>

一般来说,在您对np.array 的输入中,使用内部元组 对每个复合数据项的元素进行分组,并使用lists 对数据项进行分组放入适当维度的数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2015-12-01
    • 2016-05-27
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多