Python 如何将此累积操作矢量化?

Python 如何将此累积操作矢量化?,python,numpy,Python,Numpy,设W为维度的矩阵(x,nP)[见问题末尾] 现在,我正在执行以下代码: uUpperDraw = np.zeros(W.shape) for p in np.arange(0, nP): uUpperDraw[s, p] = (W[s+1,:(p+1)]).sum() 我想将其矢量化以提高效率。给定一个pGrid=[0,1,…],我如何重现以下内容 uUpperDraw = np.array([sum(W[x, 0]), sum(W[x,0] + W[x, 1]), sum(W[x,0

W
为维度的矩阵
(x,nP)
[见问题末尾]

现在,我正在执行以下代码:

uUpperDraw = np.zeros(W.shape)
for p in np.arange(0, nP):
    uUpperDraw[s, p] = (W[s+1,:(p+1)]).sum()
我想将其矢量化以提高效率。给定一个
pGrid=[0,1,…]
,我如何重现以下内容

uUpperDraw = np.array([sum(W[x, 0]), sum(W[x,0] + W[x, 1]), sum(W[x,0] + W[x, 1] + W[x, 2]) ...
这里有一些可重复的例子

>>> s, nP
(3, 10)
>>> W

array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 2.        ,  1.63636364,  1.38461538,  1.2       ,  1.05882353,
         0.94736842,  0.85714286,  0.7826087 ,  0.72      ,  0.66666667]])
>>> uUpperDraw
array([[  0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ],
       [  0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ],
       [  0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ],
       [  2.        ,   3.63636364,   5.02097902,   6.22097902,
          7.27980255,   8.22717097,   9.08431383,   9.86692252,
         10.58692252,  11.25358919],
       [  0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ]])

这看起来像是累积的总和。当你想把每一行的累计总和分开计算时,这里的方法就行了

uUpperDraw = np.cumsum(W,axis=1)

是的,就是这个!我错过了!但首先我认为OP正在寻找python解决方案!经验法则:不要在numpy对象上使用for循环。Travis pas含量。