gpt4 book ai didi

numpy - 从平面列表创建结构化数组

转载 作者:行者123 更新时间:2023-12-01 01:02:20 26 4
gpt4 key购买 nike

假设我有一个像这样的平面列表 L:

In [97]: L
Out[97]: [2010.5, 1, 2, 3, 4, 5]

...我想得到一个这样的结构化数组:
array((2010.5, [1, 2, 3, 4, 5]),
dtype=[('A', '<f4'), ('B', '<u4', (5,))])

我怎样才能最有效地进行这种转换?我不能将后一个 dtype 直接传递给 array(L, ...)array(tuple(L)) :
In [98]: dtp                                                                                                                                                                                 [9/1451]
Out[98]: [('A', '<f4', 1), ('B', '<u4', 5)]

In [99]: array(L, dtp)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-99-32809e0456a7> in <module>()
----> 1 array(L, dtp)

TypeError: expected an object with a buffer interface
In [101]: array(tuple(L), dtp)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-101-4d0c49a9f01d> in <module>()
----> 1 array(tuple(L), dtp)

ValueError: size of tuple must match number of fields.

有效的是传递一个临时 dtype,其中每个字段都有一个条目,然后使用我真正想要的 dtype 来查看它:
In [102]: tdtp
Out[102]:
[('a', numpy.float32),
('b', numpy.uint32),
('c', numpy.uint32),
('d', numpy.uint32),
('e', numpy.uint32),
('f', numpy.uint32)]

In [103]: array(tuple(L), tdtp).view(dtp)
Out[103]:
array((2010.5, [1, 2, 3, 4, 5]),
dtype=[('A', '<f4'), ('B', '<u4', (5,))])

但是创建这个临时 dtype 是一个额外的步骤,如果可能的话我想避免。

是否可以直接从我的平面列表转到我的结构化 dtype,而不使用上面显示的中间 dtype?

(注意:在我的实际用例中,我有一个读取例程,读取自定义文件格式和每个条目的许多值;所以我宁愿避免需要手动构建临时和实际 dtype 的情况。)

最佳答案

而不是通过 tuple(L)array , 传递具有与 dtype 嵌套匹配的嵌套值的参数。对于您展示的示例,您可以传入 (L[0], L[1:]) :

In [28]: L
Out[28]: [2010.5, 1, 2, 3, 4, 5]

In [29]: dtp
Out[29]: [('A', '<f4', 1), ('B', '<u4', 5)]

In [30]: array((L[0], L[1:]), dtype=dtp)
Out[30]:
array((2010.5, [1L, 2L, 3L, 4L, 5L]),
dtype=[('A', '<f4'), ('B', '<u4', (5,))])

关于numpy - 从平面列表创建结构化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com