在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)
来创建数组,然后在调用第二列或第三列的值时再转换成整数,这样做实在不太理想。
我该如何从列表的列表foo
中创建我想要的结构化数组bar
呢?
2 个回答
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)
2
这里有一种创建结构化数组的方法:
>>> 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
。