Numpy:填充数组以矢量化嵌套的求和

时间:2018-05-26 18:29:59

标签: python arrays numpy matrix vectorization

我想在Python中对嵌套的sum进行向量化,以加快这个过程。目前我已经嵌套了for循环。

    for ja in np.arange(0,Na):
        for jb in np.arange(0,Nb):
            for ma in np.arange(-ja,ja+1):
            ...

最终结果是2x2矩阵之和,每个矩阵的条目取决于ja,jb,ma,mb的值。 矩阵看起来像:

[[f11(ja,jb,ma,mb),f12(ja,jb,ma,mb)],
 [f21(ja,jb,ma,mb),f22(ja,jb,ma,mb)]]

其中fij是函数。这些函数可以应用于数组,因为它们将逐个元素地工作(expoenetials,square roots,trig functions等...)。我可以创建像:

这样的数组
ja=[0,0,0,1,1,1,2,2,2,3,3,3]
jb=[0,1,2,3,0,1,2,3,0,1,2,3]

使用

range_a = np.arange(0,Na/2+1)
range_b = np.arange(0,Nb/2+1)
ja = np.tile(a_range,Nb/2+1)
jb = np.repeat(b_range,Na/2+1)

但我的麻烦是创建数组,这样对于上面j中的每个值,我们都有m结构(从-j到j):

ma=[0,0,0,-1,-1,-1,0,0,0,1,1,1,-2,-2,-2,...]
mb=[0,-1,0,1,-2,-1,0,1,2,...]

我在制作那些m阵列时遇到了麻烦!每次-j,...,j结构重复时它都有不同的长度,所以我不能使用像numpy.tilenumpy.repeat这样的函数。那么,关于如何做到这一点的任何想法?

我的进一步意图可能是相关的:我希望能够用零填充它们并构造2 *长度矩阵,这样只填充一个条目(每个向量需要4个矩阵,总共4个向量)。然后我可以将这些函数应用到并添加这些upp。为了计算2 * 2矩阵的总和,我将使用长度为* 4的矩阵对产品进行点加工。结果是2 * 2。也许存在更好的策略?我以为这之前可能已经发生了,因为它在物理学中有一个共同的应用(跟踪密度算子),但我还没有找到它。

0 个答案:

没有答案