2013-07-02 33 views
2

我不太确定如何描述我的问题,但我会尝试。在numpy数组中使用基于位置的numpy算术

我想知道如果numpy的有功能做到这一点:

可以说我有一个二维数组叫做网格:

grid = [ [0,0], 
     [0,0] ] 

我也有第二个二维数组称为ALIST:

aList = [ [1,2], 
      [3,4] ] 

我想基于第一个数组的索引应用数学到第一个数组。

所以在每次迭代完成的数学是这样的:

grid[i][j] = [(i - aList[k][0]) + (j - aList[k][1])] 

目前这样在用Python for循环的方式,昂贵的,所以我需要一个替代。

编辑:更多的澄清,如果我不使用numpy的我会写这样的事:

for i in range(2): 
    for j in range(2): 
     num = 0 
     for k in range(2): 
      num += (i-aList[k][0]) + (j-aList[k][1]) 
     grid[i][j] = num 

然而这实在是太大了蟒蛇减缓了我的数据量。

+1

能否请您贴上您的脚本的一个小的工作副本?很难解析这里发生的事情。什么是'k'? – wflynny

+0

如果这真的是你在做的事情,'k'是迭代数,那么注意你的表达式可以简化为'[i + j - c]'其中'c = aList [k] [0] + aList [k] [1]'...... – Floris

+0

对不起,如果我把这个问题弄糊涂了,我知道我在解释这个时会不好。我,j和k都是迭代器。我和j遍历整个二维数组网格。 K遍历数组,网格中每个点处的aList。 –

回答

1

您的代码可以被复制并大幅加快如下:

i_s = np.arange(2) 
j_s = np.arange(2) 

fast_grid = (i_s + j_s[:, None])*len(aList) - aList.sum()