如何将NumPy数组附加到NumPy数组

时间:2017-03-02 01:17:50

标签: python numpy

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

3 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:1)

我发现将此代码与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

答案 2 :(得分:0)

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

也就是说,您可以通过指定轴

来实现目标
df_result = df2.set_index('ids').combine_first(df1.set_index('ids'))
df_result.reset_index()