Converting list of lists to numpy array with multiple data types
我有一个从文件中读取的列表的列表。 每个内部列表的长度为6个元素,并具有3个字符串和5个浮点数。 如何将列表列表转换为numpy数组? 谢谢!
您需要一个结构化数组,该数组具有复合
清单示例清单:
1 | In [4]: ll = [['one','two',1,1.23],['four','five',4,34.3],['six','seven',4,34.3]] |
尝试创建一个常规数组,生成一个字符串数组:
1 2 3 4 5 6 | In [5]: np.array(ll) Out[5]: array([['one', 'two', '1', '1.23'], ['four', 'five', '4', '34.3'], ['six', 'seven', '4', '34.3']], dtype='|S5') |
但是,如果我指定一个包含两个字符串,一个int和一个float的
1 2 3 4 5 6 | In [8]: np.array([tuple(x) for x in ll],dtype='S5,S5,i,f') Out[8]: array([('one', 'two', 1, 1.2300000190734863), ('four', 'five', 4, 34.29999923706055), ('six', 'seven', 4, 34.29999923706055)], dtype=[('f0', 'S5'), ('f1', 'S5'), ('f2', '<i4'), ('f3', '<f4')]) |
请注意,我必须将内部列表转换为元组。这就是结构化数组获取其输入以及显示它的方式。它有助于将结构化的"行"与常规(2d)阵列的统一"行"区分开。
从
还有其他指定
进一步的测试(https://stackoverflow.com/a/47774915/901925)显示此元组转换并不那么费时。简单地创建数组会花费更多时间。
我有同样的问题,但是元组是没有解决方案的。所以我发现(python 3.7.1):
1 2 3 | ll = [['one','two',1,1.23],['four','five',4,34.3],['six','seven',4,34.3]] np.array(ll, dtype = 'object') |
结果:
1 2 3 | array([['one', 'two', 1, 1.23], ['four', 'five', 4, 34.3], ['six', 'seven', 4, 34.3]], dtype=object) |