python对2d数组求和得到1d数组

2024-05-17 19:50:10 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个2d数组(x,y)和函数z=F(x,y)的值

   x = y = array([ 1.,  2.,  3.,  4.,  5.])

   z= array([[  1.,   2.,   3.,   4.,   5.],
       [  2.,   4.,   6.,   8.,  10.],
       [  3.,   6.,   9.,  12.,  15.],
       [  4.,   8.,  12.,  16.,  20.],
       [  5.,  10.,  15.,  20.,  25.]])

现在我要找到的是积分$p(w)=\int F(x,y)\delta(x-y=w)dx dy$ 为此,我通过w=x-y来构造w矩阵 这让我觉得

^{pr2}$

现在我必须把z的所有值加起来,比如w=3,我应该得到4+10=14。在

问题是做最后一部分最好的方法是什么?

。这是一个例子,数组通常是不相等的,不具有本例中的对称性。 我想迭代是一个不好的选择,因为这些数组相当大。在


Tags: 方法函数矩阵数组array例子intdelta
2条回答

这看起来是使用^{}和numpy的新(v1.8.2)^{}函数的好地方:

uvals, uidx = np.unique(w, return_inverse=True)

output = np.zeros_like(uvals)
np.add.at(output, uidx, z.ravel())

print uvals
# [-4. -3. -2. -1.  0.  1.  2.  3.  4.]
print output
# [  5.  14.  26.  40.  55.  40.  26.  14.   5.]
z[w == 3].sum()

w == 3生成一个布尔数组,表示w的哪些位置有3。z[w == 3]给出了一个与这些位置相对应的{}元素的数组,sum()将它们相加。在NumPy tutorial中你会学到很多这类东西,在NumPy reference中你会学到更多。在

相关问题 更多 >