2017-03-02 101 views
1

我试图填充NumPy数组的NumPy数组。每次我完成循环的迭代时,我都会创建要添加的数组。然后我想将该数组追加到另一个数组的末尾。例如:如何将NumPy数组附加到NumPy数组中

first iteration 
    np.append([], [1, 2]) => [[1, 2]] 
next iteration 
    np.append([[1, 2]], [3, 4]) => [[1, 2], [3, 4]] 
next iteration 
    np.append([[1, 2], [3, 4]], [5, 6]) => [[1, 2], [3, 4], [5, 6]] 
etc. 

我使用np.append尝试,但这将返回一个一个维阵列,即

[1, 2, 3, 4, 5, 6] 
+2

查找'np.vstack'虽然我建议提高效率创造了2D Python列表先用'append'为你做什么,如果可以的话,只在最后调用'np.array'。 – Julien

+0

使用numpy.append可能并不简单。根据https://docs.scipy.org/doc/numpy/reference/generated/numpy.append.html如果使用axis,被附加的数组必须与其被附加到的数组具有相同的维数。如果您不使用轴,则所使用的值将被平铺。 – opensam

+0

@Julien我不敢相信我没有想到这一点。除了效率之外,它看起来更直截了当,因为在计算完整的二维数组之前,我实际上并没有对数据进行任何处理,只要它是NumPy格式。谢谢。 – UBears

回答

0

声明:附加阵列应该是例外,因为它是低效率的。

也就是说,你可以通过指定轴

a = np.empty((0, 2)) 
a = np.append(a, [[3,6]], axis=0) 
a = np.append(a, [[1,4]], axis=0) 
1

巢阵列,使他们有一个以上的轴实现你的目标,然后使用append时指定轴。

import numpy as np 
a = np.array([[1, 2]]) # note the braces 
b = np.array([[3, 4]]) 
c = np.array([[5, 6]]) 

d = np.append(a, b, axis=0) 
print(d) 
# [[1 2] 
# [3 4]] 

e = np.append(d, c, axis=0) 
print(e) 
# [[1 2] 
# [3 4] 
# [5 6]] 

或者,如果你坚持使用列表,使用numpy.vstack

import numpy as np 
a = [1, 2] 
b = [3, 4] 
c = [5, 6] 

d = np.vstack([a, b]) 
print(d) 
# [[1 2] 
# [3 4]] 

e = np.vstack([d, c]) 
print(e) 
# [[1 2] 
# [3 4] 
# [5 6]]