gpt4 book ai didi

python - numpy 操作的顺序不等于逻辑(以及 Octave )?

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:15 25 4
gpt4 key购买 nike

也许这个问题应该严格在 scipy-users 中,但我也会在这里尝试。

所以这是我最近发现的东西,让我想知道。

我想定义一个标量,我称之为净绝对质量平衡误差或简称 NAMBE。这个 NAMBE 是一个基向量和另一个向量之间的绝对差除以基向量再乘以一百,用伪代码表示:

NAMBE=sum(abs(a-b)/a)*100

当我用 python 做的时候,我决定把一行分成两行,这样代码就更多了可读性:

>>> a=np.array([0.1,0.1,0.1,0.1,0.1])
>>> b=np.array([0.1,0.1,0.1,0.1,0.1])*2
>>> b
array([ 0.2, 0.2, 0.2, 0.2, 0.2])
>>> a-b
array([-0.1, -0.1, -0.1, -0.1, -0.1])
>>> s=np.sum(abs(a-b))
>>> s
0.5
>>> s/np.sum(a)
1.0

我认为 numpy 会明智地处理所有元素,所以如果我只做一行,我注意到结果是不同的:

>>> s=np.sum(abs(a-b)/a)
>>> s
5.0

现在,如果我用 Octave 音程检查自己的数据,我会得到不同的结果:

octave:1> a=[0.1,0.1,0.1,0.1,0.1]
a =

0.10000 0.10000 0.10000 0.10000 0.10000

octave:2> b=a*2
b =

0.20000 0.20000 0.20000 0.20000 0.20000

octave:3> sum(a)
ans = 0.50000
octave:4> sum(b)
ans = 1
octave:5> sum(a-b)
ans = -0.50000
octave:6> sum(abs(a-b))
ans = 0.50000
octave:7> s=sum(abs(a-b))
s = 0.50000
octave:8> s/sum(a)
ans = 1
octave:9> s=sum(abs(a-b)/a)
s = 1.0000
octave:10> s=sum(abs(a-b)/sum(a))
s = 1

请注意,Octave 中 9 和 10 的输出没有区别,尽管在 Python 中...所以,我的问题是:为什么 python 会这样?哪一个是对的? Octave 还是 Python?

最佳答案

sum(a-b)/sum(a)sum((a-b)/a) 不同。

考虑例如a=[1,0]b=[-1,1]。然后 sum(a/b) == sum([-1,0]) == -1,但是 sum(a)/(sum(b) == 1/0 这没有意义。

关于python - numpy 操作的顺序不等于逻辑(以及 Octave )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com