Python numpy.copy阵列内存问题
我有一个大的numpy数组Python numpy.copy阵列内存问题,python,arrays,numpy,Python,Arrays,Numpy,我有一个大的numpy数组my_数组,我将它复制到另一个临时数组temp_my_数组,以便在循环内的计算中使用它,如下所示: 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[it
my_数组
,我将它复制到另一个临时数组temp_my_数组
,以便在循环内的计算中使用它,如下所示:
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有内存错误。当我的_数组太大时,复制。此外,分析表明np.copy是我代码中最慢的部分。有什么想法吗?这听起来合理吗?将质量指定给原始阵列而不制作副本
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()
立即返回数组。我建议您只复制实际更改的值。对于您的代码,这只是一个微小的更改:
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]
否则,您可以对函数进行矢量化,但如果[某些其他项]
依赖于您当前的索引,这可能会很烦人;如果它依赖于以前的我的数组
结果,则不可能实现这一点。我需要一份深度副本,这样,当我在temp\u my\u array
中更改一个项目时,它不会在my\u array
中更改相同的项目。对数组进行一次处理(您在第2行所做的操作),这将复制整个数组,即所有值,您可以随意更改所有值。对不起,我没有意识到您在函数调用中使用了my\u array
中的值。在第二个for循环中,您不能只执行my\u array[item]=f(my\u array[item])
而不处理临时数组吗?您用np创建的迭代器。其中不会引用循环中不断变化的my_数组
。@Lærne您能再详细说明一下吗?这是一个有趣的解决方案!这种计算是在矢量化版本中进行的吗?如果某些其他项
依赖于my_array
的先前结果,那么您不能以这种方式进行矢量化,因此这实际上取决于其他项是什么。@BehzadJamali Yeah带有索引数组的赋值是用numpy进行矢量化的,所以这应该非常快。@AlexanderReynolds是的,这是真的,我假设它不是,因为它是来自其他地方的“其他项目”。我依赖于my_array
的先前值。确实可以说,向量化将通过删除第二个循环来加速我的代码,但我仍然需要执行my_array=np.copy(临时我的数组)
?