如何在numpy数组末尾添加元素并从开头删除元素?

6

我有一个形状为:(1, 100)的数组,它是:

[[1. 2. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 55.]]

我希望在结尾添加一些内容(比如数字123),并删除第一个元素,这样我将得到:

[[2. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 55. 123.]]

保持原始形状 (1, 100)

我正在尝试:

x_pred = np.append(x_pred, next_index, axis=1)

(x_pred 是一个形状为 (1, 100) 的数组,而 next_index 是一个标量)

但是我收到了一个错误:

ValueError: all the input arrays must have same number of dimensions

我做错了什么?

什么是 something - yatu
一个数字,比如 123 - Shamoon
你可以查看这篇帖子: https://dev59.com/S6fja4cB1Zd3GeqPqRc7 希望能对你有所帮助。 - PAYRE Quentin
1
类似 np.r_[a,123][1:] 这样的东西。 - yatu
相关:NumPy附加和连接 - wwii
显示剩余3条评论
3个回答

4
你可以使用 roll 实现这个功能。
a = np.zeros((1,10))

#roll and replace
a[0] = np.roll(a[0],-1)
a[0][-1] = new_value

1
import numpy as np
x_pred = np.zeros((1,100))
x_pred = np.insert(x_pred, x_pred.size, 123, 1)
x_pred = np.delete(x_pred, 0, axis=1)

x_pred打印:

array([[  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
        123.]])

大小为100


以下代码不适用于二维数组,但对于一维数组是正确的:

使用numpy insert函数可以实现此操作。

import numpy as np
tmp = np.array([0,1,2,3])
tmp = np.insert(tmp[1:], tmp.size-1, 123)
# [  1,   2,   3, 123]

或者更像你的例子。
import numpy as np
tmp = np.array([0,0,0,0])
tmp = np.insert(tmp[1:], tmp.size-1, 123)
# [  0,   0,   0, 123]

np.insert() 中,第一个参数是要插入的数组,第二个参数是要插入的索引,第三个参数是要插入的值。 tmp[1:] 表示除了第一个元素(即第0个元素)之外的所有元素。
x_pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0,])
x_pred = np.insert(x_pred[1:], x_pred.size-1, 123)

x_pred 打印:

array([  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0, 123])

并且x_pred.size输出100


我收到 IndexError: index 99 is out of bounds for axis 0 with size 0 的错误。 - Shamoon
即使使用 tmp.size-1 索引也可以吗? - trker
是的,我有 x_pred = np.insert(x_pred[1:], x_pred.size-1, next_index),而且 x_pred.size100 - Shamoon
1
我理解了,我错过了您有一个1x100的二维数组而不是一个一维数组。 - trker
现在已经修复了。 - trker
显示剩余2条评论

1
将标量作为列表附加到一个列表中,使其具有相同的维数:
>>> a = np.array([[0,1,2,3]])
>>> a
array([[0, 1, 2, 3]])
>>> q = 123
>>> np.append(a[:,1:],[[q]], axis=1)
array([[  1,   2,   3, 123]])
>>>

或者

>>> b = np.array([[q]])
>>> np.concatenate([a[:,1:],b], 1)
array([[  1,   2,   3, 123]])
>>> np.concatenate([a[:,1:],[[q]]], 1)
array([[  1,   2,   3, 123]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接