我正在尝试将新行附加到循环中的现有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] ...]
答案 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等),最好在列表中收集组件,然后执行一次连接。