2012-08-06 61 views
0

在我的程序中,我需要在循环超过1000次的函数内使用大约500x500至1500x1500的数组。在每次迭代中,我需要从具有相同形式的数组开始(其维数在所有迭代中都是固定的)。的初始值将是:重新分配/删除numpy数组与循环中的新分配

[0 0 0 ... 1] 
[0 0 0 ... 1] 
.... 

然而,阵列的内容将在循环内进行修改。什么是将数组“重置”为这种格式的最有效方式,所以我可以每次都将相同的数组传递给函数,而不必每次都分配一组新内存。 (我知道行的被修改的范围)

我曾尝试:

a[first_row_modified:last_row_modified,:] = 0. 
a[first_row_modified:last_row_modified,:-1] = 1. 

,但它需要的时间大致相同量的只是用下面的每次创建一个新的数组:

a = zeros((sizeArray, sizeArray)) 
a[:,-1] = 1. 

有没有更快的方法来有效地“擦除”数组,并将最后一列更改为数组?我认为这与这个问题类似,clearing elements of numpy array,虽然我的数组不改变大小,我没有看到以前提出的问题的权威答案。

+2

你有没有做过任何分析?重置阵列是否占用了大量的处理时间? – Luke 2012-08-06 18:18:21

+0

只是出于好奇你有没有分析你的代码,这是否需要大量的时间?在我的机器上做这1000次的时间少于2秒。 – 2012-08-06 19:24:48

+0

我已经分析了代码。大部分时间都是在与MKL相关的numpy中花费线性代数。我已经优化了其他所有内容,但在配置文件中,它表示3%的时间用于零功能。 – user1554752 2012-08-06 19:47:02

回答

0

否;我认为你做这件事的方式和它的速度一样快。