numpy.copy数组的内存问题

时间:2017-11-30 09:01:45

标签: python arrays numpy

我有一个很大的numpy数组my_array,我将其复制到另一个临时数组temp_my_array中,以便在循环内的计算中使用它,如下所示:

my_array = [10.1, 20.3, ..., 11.2] # a large numpy array
temp_my_array = np.copy(my_array)

for i in range(200000):
     for item in np.where(my_array> 5): 
           temp_my_array[item] = f(my_array[some other items]) 
     my_array = np.copy(temp_my_array)

np.copy如此之大时,my_array存在内存错误。此外,分析表明np.copy是我代码中最慢的部分。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我建议你只复制实际改变的值。使用您的代码,这只是一个小小的改变:

my_array = [10.1, 20.3, ..., 11.2] # a large numpy array
temp_my_array = np.copy(my_array)

for i in range(200000):
    inds = np.where(my_array > 5)
    for item in inds: 
        temp_my_array[item] = f(my_array[some other items]) 
    my_array[inds] = temp_my_array[inds]

否则你可以对你的函数进行向量化,但是如果[some other items]依赖于你当前的索引,那么这可能会很烦人,如果它依赖于之前的my_array结果,则可能是不可能的。

答案 1 :(得分:1)

听起来合理吗?批量分配到原始数组而不进行复制

my_array = [10.1, 20.3, ..., 11.2] # a large numpy array

for i in range(200000):
     my_array[np.where(my_array>5)] = f(my_array[some other items]) # Mass assign instead of for-loop

您需要确保f()现在返回一个数组。