Numpy数组内存问题

Ell*_*iot 5 python arrays numpy

我相信我使用numpy数组会遇到内存问题.以下代码正在运行数小时:

    new_data = npy.array([new_x, new_y1, new_y2, new_y3])
    private.data = npy.row_stack([private.data, new_data])
Run Code Online (Sandbox Code Playgroud)

其中new_x,new_y1,new_y2,new_y3是浮点数.

在每秒记录这些数据大约5个小时(超过72000个浮点数)后,程序变得没有响应.我认为正在发生的是某种realloc和复制操作正在淹没这个过程.有谁知道这是发生了什么?

我需要一种方法来记录这些数据,而不会遇到这种减速问题.事先没有办法知道这个数组的大小.它不一定需要使用numpy数组,但它需要类似的东西.有谁知道一个好方法?

mtr*_*trw 2

更新:我将@EOL 出色的索引建议合并到答案中。

问题可能在于row_stack目的地的发展方式。您自己处理重新分配可能会更好。下面的代码分配一个大的空数组,填充它,并随着它一次填充一个小时而增长它

numcols = 4
growsize = 60*60 #60 samples/min * 60 min/hour
numrows = 3*growsize #3 hours, to start with
private.data = npy.zeros([numrows, numcols]) #alloc one big memory block
rowctr = 0
while (recording):
    private.data[rowctr] = npy.array([new_x, new_y1, new_y2, new_y3])
    rowctr += 1
    if (rowctr == numrows): #full, grow by another hour's worth of data
        private.data = npy.row_stack([private.data, npy.zeros([growsize, numcols])])
        numrows += growsize
Run Code Online (Sandbox Code Playgroud)

这应该可以防止内存管理器过度混乱。我在每次迭代中都尝试了这一点row_stack,它的运行速度快了几个数量级。