假设我有一个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矩阵 这给了我类似的东西
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 即可。这是一个例子,数组通常不相等,并且没有本例中的对称性。 我想,迭代将是一个糟糕的选择,因为这些数组非常大。
答案 0 :(得分:2)
z[w == 3].sum()
w == 3
构建一个布尔数组,表示w
的哪个位置有3个。z[w == 3]
给出了与这些位置对应的z
元素数组,{{1} 1}}添加它们。你会在NumPy tutorial中学到很多这类东西,你会在NumPy reference中学到更多东西。
答案 1 :(得分:1)