向空NumPy数组追加失败

发布于 2021-01-29 15:08:51

我正在尝试使用附加值填充一个空的(不是np.empty!)数组,但我却报错:

我的代码如下:

import numpy as np
result=np.asarray([np.asarray([]),np.asarray([])])
result[0]=np.append([result[0]],[1,2])

我得到:

ValueError: could not broadcast input array from shape (2) into shape (0)
关注者
0
被浏览
84
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    numpy.append与list.append在python中非常不同。我知道这是numpy的一些新程序员所引发的。numpy.append更像是连接,它创建一个新数组,并用旧数组中的值和要附加的新值填充它。例如:

    import numpy
    
    old = numpy.array([1, 2, 3, 4])
    new = numpy.append(old, 5)
    print old
    # [1, 2, 3, 4]
    print new
    # [1, 2, 3, 4, 5]
    new = numpy.append(new, [6, 7])
    print new
    # [1, 2, 3, 4, 5, 6, 7]
    

    我认为您可以通过执行以下操作来实现目标:

    result = numpy.zeros((10,))
    result[0:2] = [1, 2]
    
    # Or
    result = numpy.zeros((10, 2))
    result[0, :] = [1, 2]
    

    更新:

    如果需要使用循环创建一个numpy数组,并且您不提前知道数组的最终大小,则可以执行以下操作:

    import numpy as np
    
    a = np.array([0., 1.])
    b = np.array([2., 3.])
    
    temp = []
    while True:
        rnd = random.randint(0, 100)
        if rnd > 50:
            temp.append(a)
        else:
            temp.append(b)
        if rnd == 0:
             break
    
     result = np.array(temp)
    

    在我的示例中,结果将是一个(N,2)数组,其中N是循环运行的次数,但是显然您可以根据需要进行调整。

    新的更新

    您看到的错误与类型无关,它与您要连接的numpy数组的形状有关。如果你np.append(a, b)
    的形状ab需求相匹配。如果附加(2,n)和(n,),则会得到(3,n)数组。您的代码试图将(1,0)附加到(2,)。这些形状不匹配,因此会出现错误。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看