从Numpy中包含字符串和整数的列表创建一个结构数组

2024-06-02 04:58:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经阅读了文档,但无法解决如何使用numpy创建字符串和整数的结构化数组。我的问题的简化版本如下:

foo = [['asd', 1, 2],['bgf',2,3]]
bar = np.array(foo, dtype=['S10', 'i4','i4'])

我希望bar[:,0]作为字符串数组,而bar[:,1]和{}作为整数数组。在

不幸的是这给出了一个TypeError: data type not understood。我试过很多其他方法来让它发挥作用,但找不到任何直观的东西。在

目前我只做bar = np.array(foo),然后每当我调用第2列或第3列中的值时就将其转换为整数,这远远不是理想的。在

如何从列表列表foo创建我想要的结构数组bar?在


Tags: 字符串文档版本numpy列表foonpbar
2条回答

如果数组中有多个数据类型,请使用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)

以下是创建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。在

相关问题 更多 >