我有以下元组列表,
a=[('1A34', 'RBP', 0.0, 1.0, 0.0, 0.0, 0.0, 0.0),
('1A9N', 'RBP', 0.0456267, 0.0539268, 0.331932, 0.0464031, 4.41336e-06, 0.522107),
('1AQ3', 'RBP', 0.0444479, 0.201112, 0.268581, 0.0049757, 1.28505e-12, 0.480883),
('1AQ4', 'RBP', 0.0177232, 0.363746, 0.308995, 0.00169861, 0.0, 0.307837)]
我想要做的是创建一个形状为(4,8)
的numpy nd.array
看起来像这样:
array([['1A34', 'RBP', 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
['1A9N', 'RBP', 0.0456267, 0.0539268, 0.331932, 0.0464031, 4.41336e-06, 0.522107],
['1AQ3', 'RBP', 0.0444479, 0.201112, 0.268581, 0.0049757, 1.28505e-12, 0.480883],
['1AQ4', 'RBP', 0.0177232, 0.363746, 0.308995, 0.00169861, 0.0, 0.307837]])
我尝试了以下代码:
import numpy as np
x = np.array(a, dtype=('a10,a10,f4,f4,f4,f4,f4,f4'))
但它改为赋予这种形状:
In [37]: x.shape
Out[37]: (4,)
这样做的正确方法是什么?
答案 0 :(得分:1)
您已经完成的工作是迄今为止最合乎逻辑的方法。要实现您的要求,您需要创建一个对象数组:
z = np.array(a,dtype=np.object)
print z.shape
# (4, 8)
你要求的是一个按列列出可变数据类型的数组。这正是您使用np.array(a, dtype=('a10,a10,f4,f4,f4,f4,f4,f4'))
实现的目标。在内部,你可以把这个数组想象成C中的一个结构数组,即一个dtype=('a10,a10,f4,f4,f4,f4,f4,f4')
个实例的数组。
通过使用object
数组,您可以请求numpy将所有内容都作为一个简单的python对象处理。