假设我有一个二维数组(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矩阵,得到如下的结果
w= array([[ 0., 1., 2., 3., 4.],
[-1., 0., 1., 2., 3.],
[-2., -1., 0., 1., 2.],
[-3., -2., -1., 0., 1.],
[-4., -3., -2., -1., 0.]])
现在我必须把对应于w的所有z值加起来,假设w = 3,我应该得到4+10=14。
- 问题是最后一步该怎么做 *
P.S。这是一个例子,数组一般不相等,也没有这个例子中的对称性。我想迭代是一个糟糕的选择,因为这些数组相当大。
2条答案
按热度按时间0x6upsns1#
w == 3
构建了一个布尔数组,表示w
的哪些位置有一个3。z[w == 3]
给出了z
中对应于这些位置的元素的数组,sum()
将它们相加。您将在NumPy tutorial中学到很多这类东西,并且您将在NumPy reference中学到更多。qvsjd97n2#
这里看起来是使用
np.unique
和numpy的新(v1.8.2)np.add.at
函数的好地方: