在numpy中将元组列表整形为MxN维数组

2024-09-30 04:28:57 发布

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

我有下面的元组列表

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)]

我想做的是创建一个numpynd阵列形状(4,8) 看起来是这样的:

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,)

正确的方法是什么?你知道吗


Tags: 代码inimportnumpy列表asnparray
1条回答
网友
1楼 · 发布于 2024-09-30 04:28:57

你已经做的是目前为止最合乎逻辑的方法。要实现您的要求,您需要创建一个对象数组:

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对象处理。你知道吗

相关问题 更多 >

    热门问题