numpy数组中的自定义数据类型

Mik*_*war 23 python numpy

我正在创建一个numpy数组,它将填充我所创建的特定类的对象.我想初始化数组,使它只包含该类的对象.例如,这是我想做的事情,如果我这样做会发生什么.

class Kernel:
    pass

>>> L = np.empty(4,dtype=Kernel)

TypeError: data type not understood
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

>>> L = np.empty(4,dtype=object)
Run Code Online (Sandbox Code Playgroud)

然后将每个元素分配L为一个Kernel对象(或任何其他类型的对象).Kernel但是,从编程的角度(类型检查)和数学的(对函数集的操作),我能够拥有一个s 数组是如此的巧妙.

有没有办法让我使用任意类指定numpy数组的数据类型?

dwf*_*dwf 22

如果您的Kernel类具有可预测数量的成员数据,那么您可以为其定义dtype而不是类.例如,如果它由9个浮点数和一个int参数化,你可以这样做

kerneldt = np.dtype([('myintname', np.int32), ('myfloats', np.float64, 9)])
arr = np.empty(dims, dtype=kerneldt)
Run Code Online (Sandbox Code Playgroud)

每次想要操作单个内核的方法时,你都必须做一些强制来将它们变成类内核的对象,但这是将实际数据存储在NumPy数组中的一种方法.如果您只想存储引用,那么在没有子类化ndarray的情况下,对象dtype是最好的.