python - 创建一个 numpy.array,其元素由子类 numpy.ndarrays 组成

标签 python arrays numpy

我正在尝试创建子类 numpy 数组的 numpy 数组。不幸的是,当我创建新的子类数组时,numpy 自动将数组的元素向上转换numpy.ndarray

下面的代码显示了我正在尝试做的事情。 dummy_class 继承自 numpy.ndarray 并包含一些额外的功能(这对于当前的问题并不重要)。我使用 dummy_class 构造函数创建两个新数组,并希望将每个子类数组放入新的 numpy_ndarray 中。当有问题的数组被初始化时,子类数组的类型会自动向上转换,从 dummy_classnumpy.ndarray。下面可以找到一些重现问题的代码

import numpy

class dummy_class(numpy.ndarray):
    def __new__(cls, data, some_attribute):
        obj = numpy.asarray(data).view(cls)
        obj.attribute = some_attribute
        return obj

array_1 = dummy_class([1,2,3,4], "first dummy")
print type(array_1)
# <class '__main__.dummy_class'>

array_2 = dummy_class([1,2,3,4], "second dummy")
print type(array_2)
# <class '__main__.dummy_class'>

the_problem = numpy.array([array_1, array_2])
print type(the_problem)
# <type 'numpy.ndarray'>
print type(the_problem[0])
# <type 'numpy.ndarray'>
print type(the_problem[1])
# <type 'numpy.ndarray'>

最佳答案

这是用任意 Python 对象填充 NumPy 数组的方法:

the_problem = np.empty(2, dtype='O')
the_problem[:] = [array_1, array_2]
<小时/>

我同意 iluengo 的观点,即制作 NumPy 数组并没有利用 NumPy 的优势,因为这样做需要外部 NumPy 数组的数据类型为 object。对象数组需要的内存量与常规 Python 列表大致相同,需要比等效 Python 列表更多的时间来构建,并且计算速度并不比等效 Python 列表快。也许它们唯一的优点是它们提供了使用 NumPy 数组索引语法的能力。

关于python - 创建一个 numpy.array,其元素由子类 numpy.ndarrays 组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27860265/

相关文章:

python - Jupyter 笔记本评论快捷方式不起作用

python - 在pytorch中计算困惑度

python - 在 Python 中,什么是 `sys.maxsize` ?

python - 为什么扩展模板时我的表单不起作用

javascript - 迭代javascript中的对象集合并从该函数返回true

python - 当元素包含 numpy 数组时,无法测试 python 列表元素成员资格

c - 这可能吗? C 中的数组

c - (C) 输入后字符数组大小发生变化?

python - 在数据框中成对排列条目序列

python - 如何修改基于另一个数组的numpy数组的值?