我已经阅读了文档,但无法弄清楚如何使用numpy创建字符串和整数的结构化数组。我的问题的缩短版本如下:
foo = [['asd', 1, 2],['bgf',2,3]]
bar = np.array(foo, dtype=['S10', 'i4','i4'])
我希望将bar[:,0]
作为字符串数组,bar[:,1]
和bar[:,2]
作为整数数组。
不幸的是,这会产生TypeError: data type not understood
。我已经尝试了许多其他方法来使其工作,但找不到任何直观的东西。
目前我正在做bar = np.array(foo)
,然后每次调用第2列或第3列的值时都会转换为整数,这远非理想值。
如何从列表列表bar
创建我想要的结构数组foo
?
答案 0 :(得分:2)
以下是创建structured array的一种方式:
>>> foo = [('asd', 1, 2),('bgf',2,3)]
>>> bar = np.array(foo, dtype='S10,i4,i4')
>>> bar
array([('asd', 1, 2), ('bgf', 2, 3)],
dtype=[('f0', 'S10'), ('f1', '<i4'), ('f2', '<i4')])
>>> bar['f0']
array(['asd', 'bgf'],
dtype='|S10')
>>> bar['f1']
array([1, 2], dtype=int32)
>>> bar['f2']
array([2, 3], dtype=int32)
如果您想要一个包含元素而不是字段的普通数组,请使用dtype=object
。
答案 1 :(得分:1)
如果数组中有多个数据类型,请使用 dtype = object 。
>>> bar = np.array(foo, dtype=object)
>>> bar[:,0]
array(['asd', 'bgf'], dtype=object)
>>> bar[:,1]
array([1, 2], dtype=object)
>>> bar[:,2]
array([2, 3], dtype=object)