Numpy object array of numerical arrays

后端 未结 4 1061
一向
一向 2020-12-15 13:55

I want to create an array with dtype=np.object, where each element is an array with a numerical type, e.g int or float. For example:

>>>         


        
相关标签:
4条回答
  • 2020-12-15 14:29

    I think anyarray is what you need here:

    b = np.asanyarray([a,a,a])
    >>> b[0].dtype
    dtype('int32')
    

    not sure what happened to the other 32bits of the ints though.

    Not sure if it helps but if you add another array of a different shape, it converts back to the types you want:

    import numpy as np
    a = np.array([1,2,3])
    b = np.array([1,2,3,4])
    b = np.asarray([a,b,a], dtype=np.object)
    print(b.dtype)
    >>> object
    print(b[0].dtype)
    >>> int32
    
    0 讨论(0)
  • 2020-12-15 14:30

    I can't find any elegant solution, but at least a more general solution to doing everything by hand is to declare a function of the form:

    def object_array(*args):
        array = np.empty(len(args), dtype=np.object)
        for i in range(len(args)):
            array[i] = args[i]
        return array
    

    I can then do:

    a = np.array([1,2,3])
    b = object_array(a,a,a)
    

    I then get:

    >>> a = np.array([1,2,3])
    >>> b = object_array(a,a,a)
    >>> print b.dtype
    object
    >>> print b.shape
    (3,)
    >>> print b[0].dtype
    int64
    
    0 讨论(0)
  • 2020-12-15 14:32

    It's not exactly pretty, but...

    import numpy as np
    
    a = np.array([1,2,3])
    b = np.array([None, a, a, a])[1:]
    
    print b.dtype, b[0].dtype, b[1].dtype
    # object int32 int32
    
    0 讨论(0)
  • 2020-12-15 14:41
    a = np.array([1,2,3])
    b = np.empty(3, dtype='O')
    b[:] = [a] * 3
    

    should suffice.

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