gpt4 book ai didi

python - 堆叠 numpy recarrays 而不会丢失它们的 recarrayness

转载 作者:太空狗 更新时间:2023-10-29 21:27:39 27 4
gpt4 key购买 nike

假设我用相同的 dtype 制作了两个 recarrays 并将它们堆叠起来:

>>> import numpy as np
>>> dt = [('foo', int), ('bar', float)]
>>> a = np.empty(2, dtype=dt).view(np.recarray)
>>> b = np.empty(3, dtype=dt).view(np.recarray)
>>> c = np.hstack((a,b))

尽管 ab 是 recarrays,但 c 不是:

>>> c.foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'foo'
>>> d = c.view(np.recarray)
>>> d.foo
array([ 0, 111050731618561, 0,
7718048, 8246760947200437872])

我显然可以再次将它变成一个 recarray,如上面的 d 所示,但这很不方便。堆叠两个重排不产生另一个重排是有原因的吗?

最佳答案

或者,numpy.lib.recfunctions 中有一些辅助工具我偶然发现了here .该模块具有合并和堆叠recarrays的功能:

from numpy.lib.recfunctions import stack_arrays
c = stack_arrays((a, b), asrecarray=True, usemask=False)
c.foo
>>> array([ 140239282560000, 4376479720, -4611686018427387904,
4358733828, 4365061216])

如果要向 recarray 添加额外的列,可以使用 merge_arrays 来完成:

import numpy as np
from numpy.lib.recfunctions import merge_arrays
dt1 = [('foo', int), ('bar', float)]
dt2 = [('foobar', int), ('barfoo', float)]
aa = np.empty(6, dtype=dt1).view(np.recarray)
bb = np.empty(6, dtype=dt2).view(np.recarray)

cc = merge_arrays((aa, bb), asrecarray=True, flatten=True)
type(cc)
>>> numpy.core.records.recarray

(虽然不是问题的答案,但我将后一个示例作为引用发布)

关于python - 堆叠 numpy recarrays 而不会丢失它们的 recarrayness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791791/

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