使用字符串和整数从Numpy中的列表创建结构数组

时间:2014-10-24 12:43:37

标签: python arrays numpy

我已经阅读了文档,但无法弄清楚如何使用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

2 个答案:

答案 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)