【问题标题】:How to append a NumPy array to a NumPy array如何将 NumPy 数组附加到 NumPy 数组
【发布时间】:2018-10-29 13:44:35
【问题描述】:

我正在尝试填充 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]

【问题讨论】:

  • 查找np.vstack 虽然我建议像你一样首先使用append 创建一个二维python 列表,如果可以的话,只在最后调用np.array
  • 使用 numpy.append 可能并不简单。根据docs.scipy.org/doc/numpy/reference/generated/numpy.append.html,如果您使用轴,则附加的数组必须与附加的数组具有相同的维度。如果您不使用轴,则附加的值将在使用前被展平。
  • @Julien 我不敢相信我没有想到这一点。除了效率之外,它似乎更直接,因为在计算整个二维数组之前,我实际上并没有对要求它采用 NumPy 格式的数据做任何事情。谢谢。

标签: python numpy


【解决方案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]]

【讨论】:

  • 对于numpy.vstack,我猜你的意思是“坚持使用数组列表”?
【解决方案2】:

我发现将此代码与 numpy 一起使用很方便。例如:

loss = None
new_coming_loss = [0, 1, 0, 0, 1]
loss = np.concatenate((loss, [new_coming_loss]), axis=0) if loss is not None else [new_coming_loss]

实际使用:

self.epoch_losses = None
self.epoch_losses = np.concatenate((self.epoch_losses, [loss.flatten()]), axis=0) if self.epoch_losses is not None else [loss.flatten()]

复制粘贴解决方案:

def append(list, element):
    return np.concatenate((list, [element]), axis=0) if list is not None else [element]

警告:列表和元素的维度除第一个维度外应相同,否则会得到:

ValueError: all the input array dimensions except for the concatenation axis must match exactly

【讨论】:

    【解决方案3】:

    免责声明:附加数组应该是例外,因为它效率低。

    也就是说,您可以通过指定轴来实现目标

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

    【讨论】:

    • 如果追加效率低,你会推荐哪种方式?
    猜你喜欢
    • 2021-10-12
    • 2018-07-15
    • 2020-01-10
    • 2017-05-22
    • 1970-01-01
    • 2017-05-22
    • 2021-02-21
    • 2021-10-25
    • 2020-03-13
    相关资源
    最近更新 更多