向空NumPy数组追加失败
我正在尝试使用附加值填充一个空的(不是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)
-
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)
的形状a
和b
需求相匹配。如果附加(2,n)和(n,),则会得到(3,n)数组。您的代码试图将(1,0)附加到(2,)。这些形状不匹配,因此会出现错误。