将新行添加到numpy数组

时间:2017-01-08 13:57:42

标签: python arrays numpy

我正在尝试将新行附加到循环中的现有numpy数组中。我已经尝试过涉及append,concatenate和vstack的方法,但最终都没有给我我想要的结果。

我尝试了以下内容:

for _ in col_change:
if (item + 2 < len(col_change)):
    arr=[col_change[item], col_change[item + 1], col_change[item + 2]]
    array=np.concatenate((array,arr),axis=0)
    item+=1

我也尝试过最基本的格式,它仍然给我一个空数组。

array=np.array([])
newrow = [1, 2, 3]
newrow1 = [4, 5, 6]
np.concatenate((array,newrow), axis=0)
np.concatenate((array,newrow1), axis=0)
print(array)

我希望输出为[[1,2,3] [4,5,6] ...]

2 个答案:

答案 0 :(得分:1)

如果您需要[[1,2,3],[4,5,6]]我可以在没有append np.arange的情况下为您提供替代方案,然后重新塑造它:

>>> import numpy as np

>>> np.arange(1,7).reshape(2, 3)
array([[1, 2, 3],
       [4, 5, 6]])

或者创建一个大数组并手动填充(或循环):

>>> array = np.empty((2, 3), int)
>>> array[0] = [1,2,3]
>>> array[1] = [4,5,6]
>>> array
array([[1, 2, 3],
       [4, 5, 6]])

关于您的示例的说明:

在第二个中你忘了保存结果,使它成为array = np.concatenate((array,newrow1), axis=0)并且它可以工作(不完全像你想要它但数组不再是空的)。第一个例子似乎很难缩进,不知道变量和/或问题,很难调试。

答案 1 :(得分:1)

以递增方式构建数组的正确方法是不以数组开头:

alist = []
alist.append([1, 2, 3])
alist.append([4, 5, 6])
arr = np.array(alist)

这与

基本相同
arr = np.array([ [1,2,3], [4,5,6] ])

制作小型(或大型)样本数组的最常用方法。

即使您有充分的理由使用某些版本的concatenate(hstack,vstack等),最好在列表中收集组件,然后执行一次连接。