【问题标题】:Numpy array in array with unequal length数组中长度不等的numpy数组
【发布时间】:2023-03-27 01:26:02
【问题描述】:

我想知道如何在一个 numpy 数组中创建一个 numpy 数组。主数组中的每个数组都应该能够具有不同的长度。主数组应该是里面数组对象的索引号。

我已经有一个这种类型的数组的例子,但我想重新创建类似的东西。

例子:

test.shape
(200,)

test[0].shape
(5, 10)

test[1].shape    
(3, 10)

test[2].shape    
(6, 10)

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您需要使用dtype=object 创建一个数组,以便 numpy 知道将每个条目视为 Python 对象,而不是将整个嵌套列表视为单个数组。

    例如:

    import numpy as np
    x = np.empty((5, 10))
    y = np.empty((3, 10))
    z = np.empty((6, 10))
    
    test = np.array([x, y, z], dtype=object)
    test[0].shape
    # [5, 10]
    

    【讨论】:

    • 如果x,yz 都具有相同的形状会怎样?还是第二个维度不同?
    【解决方案2】:

    创建对象数组最可靠的方法是初始化并填充它。 np.array 的行为太多变了。

    In [658]: alist = [np.ones((5,10),int), np.zeros((3,10),int), np.arange(60).resh
         ...: ape(6,10)]
    In [659]: arr = np.empty(len(alist), dtype=object)
    In [660]: arr[:] = alist
    In [661]: arr
    Out[661]: 
    array([ array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]),
           array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),
           array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
           [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
           [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
           [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
           [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])], dtype=object)
    

    np.array 的行为随组件的相对形状而变化:

    漂亮的对象数组:

    In [668]: np.array((np.ones((3,5),int), np.ones((2,5),int)),object)
    Out[668]: 
    array([array([[1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1]]),
           array([[1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1]])], dtype=object)
    

    3d 数组:

    In [669]: np.array((np.ones((3,5),int), np.ones((3,5),int)),object)
    Out[669]: 
    array([[[1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1]],
    
           [[1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1]]], dtype=object)
    

    错误

    In [670]: np.array((np.ones((3,4),int), np.ones((3,5),int)),object)
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-670-e9b41001d868> in <module>()
    ----> 1 np.array((np.ones((3,4),int), np.ones((3,5),int)),object)
    
    ValueError: could not broadcast input array from shape (3,4) into shape (3)
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多