将新行附加到 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 数组的主要内容,如果未能解决你的问题,请参考以下文章

将一个 numpy 数组附加到一个列表 - 奇怪的事情

如何将 1d numpy 数组附加到 2d numpy 数组 python

python - 如何将 numpy 数组附加到 pandas 数据帧

将多维元素附加到 numpy 数组中而不进行整形

附加 Numpy 数组失败

附加一个具有不同第一维的numpy数组