Custom data types in numpy arrays

后端 未结 3 1319
小蘑菇
小蘑菇 2020-12-02 23:09

I\'m creating a numpy array which is to be filled with objects of a particular class I\'ve made. I\'d like to initialize the array such that it will only ever contain object

相关标签:
3条回答
  • 2020-12-02 23:46

    If your Kernel class has a predictable amount of member data, then you could define a dtype for it instead of a class. e.g. if it's parameterized by 9 floats and an int, you could do

    kerneldt = np.dtype([('myintname', np.int32), ('myfloats', np.float64, 9)])
    arr = np.empty(dims, dtype=kerneldt)
    

    You'll have to do some coercion to turn them into objects of class Kernel every time you want to manipulate methods of a single kernel but that's one way to store the actual data in a NumPy array. If you want to only store a reference, then the object dtype is the best you can do without subclassing ndarray.

    0 讨论(0)
  • 2020-12-03 00:04

    It has to be a Numpy scalar type:

    http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#arrays-scalars-built-in

    or a subclass of ndarray:

    http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html#numpy.ndarray

    0 讨论(0)
  • 2020-12-03 00:06

    As far as I know, enforcing a single type for elements in a numpy.ndarray has to be done manually (unless the array contains Numpy scalars): there is no built-in checking mechanism (your array has dtype=object). If you really want to enforce a single type, you have to subclass ndarray and implement the checks in the appropriate methods (__setitem__, etc.).

    If you want to implement operations on a set of functions (Kernel objects), you might be able to do so by defining the proper operations directly in your Kernel class. This is what I did for my uncertainties.py module, which handles numpy.ndarrays of numbers with uncertainties.

    0 讨论(0)
提交回复
热议问题