【发布时间】:2018-05-14 16:39:29
【问题描述】:
我有以下数组:
a = ['(0.0 | 0.0 | 0.0)', '(0.0 | 0.0 | 0.1)'] # strings
b = [0.0, 0.1] # floats
c = [0.0, 0.2] # floats
d = [0.0, 0.3] # floats
e = [0.0, 0.4] # floats
我的目标是使用 numpy 创建一个最终的二维数组,以便保留数据类型:
final = [a, b, c, d, e] -> [ ['(0.0 | 0.0 | 0.0)', ...] , [0.0, 0.1], ... ]
当我尝试这样做时
np.array([a, b, c, d, e])
发生的情况是浮点数被转换为字符串。自然地,我去查看了 numpy dtype doc 的 dtype 文档,并尝试通过
dt = np.dtype([('f1', np.str), ('f2', np.float), ('f3', np.float), ('f4', np.float), ('f5', np.float)])
final = np.array([a, b, c, d, e], dtype=dt)
但是它试图将字符串数组转换为浮点数:
ValueError:无法将字符串转换为浮点数:'(0.0 | 0.0 | 0.0)'
有谁知道我做错了什么?这应该是可能的......
【问题讨论】:
-
AFAICT,Numpy 中的数组是同构的。您要么将数组中的所有项目设为字符串、浮点数或其他数据类型。
-
是的,但是您可以构造接受结构化、混合数据类型的 dtype 对象。就像可以构造一个后跟一个整数的字符串一样。我认为我的问题是我有不同数据类型的子数组:S