将新行附加到 numpy 数组
Posted
技术标签:
【中文标题】将新行附加到 numpy 数组【英文标题】:Appending a new row to a numpy array 【发布时间】:2017-05-22 20:32:10 【问题描述】:我正在尝试在循环中将新行追加到现有的 numpy 数组。我已经尝试过涉及附加、连接和 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]...]
【问题讨论】:
array = np.concatenate((array,newrow), axis=0)
和 array = np.concatenate((array,newrow1), axis=0)
。它不能通过引用起作用。操作前需要array =
。
已经在这里回答:[1]:***.com/questions/3881453/numpy-add-row-to-array
我也试过了,但它最终会像这样添加到行尾 [1. 2. 3. 4. 5. 6.]
然后试试array = np.vstack([np.concatenate([array, newrow]), newrow1])
。所有这些选项都可以在 Gyanshu 发布的线程中找到。
【参考方案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)
并且它可以工作(与您想要的不完全一样,但数组不再为空)。第一个示例似乎缩进很严重,并且不知道变量和/或那里的问题很难调试。
【讨论】:
我将数组连接起来,然后重新整形,现在可以正常工作了。【参考方案2】:增量构建数组的正确方法是不要从数组开始:
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 等),最好将组件收集在一个列表中,并执行一次连接。
【讨论】:
以上是关于将新行附加到 numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何将 1d numpy 数组附加到 2d numpy 数组 python