假设我用相同的dtype创建了两个重新数组并将它们堆叠起来:
>>> 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))
虽然a
和b
是重新阵列,但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])
显然,我可以再次将其转换为重新数组,如上面的d
所示,但这很不方便。为什么叠加两个重组不会产生另一个重组?
3条答案
按热度按时间hi3rlvi21#
另外,在
numpy.lib.recfunctions
中有一些辅助工具,我偶然发现了here。此模块具有合并和堆叠recarrays
的功能:如果想要在
recarray
中添加额外的列,可以使用merge_arrays
来完成:(虽然不是对这个问题的回答,但我发布了后一个示例作为参考)
dwbf0jvd2#
我不知道。很可能是一个从未实现过的bug/功能。
numpy.hstack
基本上是numpy.core.fromnumeric
中函数的 Package 器。Numeric是numpy的两个前身之一。numpy中的大多数函数都有一个约定,即通过在输出上调用输入的方法__array_wrap__
来输出与输入相同的类型,结果输出应该具有相同的数据,但“ Package ”在新类中。也许“ Package ”的概念并不是数字的,也从未被添加到这个函数中。您可以使用此技术来制作更智能的堆叠功能
这对重新数组和常规数组都有效
我不知道你在计划什么,但你可能想问的是,在numpy mailing list上是否有比使用文档中的,但双下划线的方法更好的方法,以及他们不自己 Package 的理由是什么。
rm5edbpk3#
顺便说一句,你也可以用途:
或
(图片来源:this mailing list message)