【问题标题】:insert data to numpy array with shift and clip使用 shift 和 clip 将数据插入到 numpy 数组
【发布时间】:2017-03-12 12:06:34
【问题描述】:

我有一个 numpy 数组:

x = np.zeros(5)
[0,0,0,0,0]

x.put(5)
[0,0,0,0,5]

x.put([1,2,3])
[0,5,1,2,3]

x.put([5,10,10])
[2,3,5,10,10]

我想要如上例所示。我只是把信息放在最后。和数据移位和剪辑溢出。

【问题讨论】:

  • 有什么理由需要使用 numpy 数组而不是 deque
  • 您可以通过从 numpy 数组继承来创建自己的对象,只需添加一个自定义的 append 方法。这是一个类似的问题stackoverflow.com/questions/4151320/efficient-circular-buffer
  • @kennytm 是的。因为最后我需要一个 numpy 数组,并且这个函数至少执行 1 到 2 M 次,并且转换为 numpy 数组需要相当长的计算时间
  • 注意有一个函数ndarray.put,但它没有上述功能。

标签: python arrays numpy


【解决方案1】:

您可以将数组的尾部部分复制到初始部分。注意这个方法是O(n),所以如果数组x很长就不适合了。

def push(x, y):
    push_len = len(y)
    assert len(x) >= push_len
    x[:-push_len] = x[push_len:]
    x[-push_len:] = y
    return x
>>> x = numpy.zeros(5)
>>> x
array([ 0.,  0.,  0.,  0.,  0.])
>>> push(x, [5])
array([ 0.,  0.,  0.,  0.,  5.])
>>> push(x, [1,2,3])
array([ 0.,  5.,  1.,  2.,  3.])
>>> push(x, [5,10,10])
array([  2.,   3.,   5.,  10.,  10.])

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 2016-10-09
    • 2013-09-08
    • 1970-01-01
    • 2021-02-04
    • 2015-08-24
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多