如何解决PyCharm给出奇怪的结果,这是内存/指针问题吗?
我在PyCharm中有一些如下的Python代码:
pd_mrc_RMS = []
for i in range(len(pd_diff_ratioRMS)):
mrc_Now = mrc_diff_ratioRMS[i]
pd_Now = pd_diff_ratioRMS[i]
pd_mrc_RMS_Now = np.sqrt(mrc_Now**2 + pd_Now**2)
pd_mrc_RMS.append(pd_mrc_RMS_Now)
我注意到有时mrc_Now
和/或pd_Now
可以是inf
或NaN
,这将导致pd_mrc_RMS_Now
是inf
或NaN
。这是合乎逻辑的。但是,对于特定情况,上面的代码使pd_mrc_RMS
的最后一个值成为pd_diff_ratioRMS
中的最后一个值。我在任何地方都没有这样的命令。我只追加到根据pd_mrc_RMS_Now
计算出来的数组pd_Now
中。为了说明问题,在这种情况下,其他数组的值是:
pd_diff_ratioRMS = [inf,0.7343642741825436,0.7102599599923878,0.22130907979104325,0.01582110950187491,0.4487684369819055,0.07653438892240305,0.2273945352145594]
mrc_diff_ratioRMS = [inf,inf,nan,inf]
代码给了我
pd_diff_ratioRMS = [inf,0.2273945352145594]
我将代码更改为此,以避免出现奇怪的现象:
pd_mrc_RMS = []
for i in range(len(pd_diff_ratioRMS)):
mrc_Now = mrc_diff_ratioRMS[i]
pd_Now = pd_diff_ratioRMS[i]
cond1 = float('-inf') < mrc_Now < float('inf')
cond2 = float('-inf') < pd_Now < float('inf')
pd_mrc_RMS_Now = 0.
if cond1 and cond2:
pd_mrc_RMS_Now = np.sqrt(mrc_Now**2 + pd_Now**2)
else:
pd_mrc_RMS_Now = float('inf')
pd_mrc_RMS.append(pd_mrc_RMS_Now)
pd_mrc_RMS = []
for i in range(len(pd_diff_ratioRMS)):
mrc_Now = mrc_diff_ratioRMS[i]
pd_Now = pd_diff_ratioRMS[i]
cond1 = float('-inf') < mrc_Now < float('inf')
cond2 = float('-inf') < pd_Now < float('inf')
pd_mrc_RMS_Now = 0.
if cond1 and cond2:
pd_mrc_RMS_Now = np.sqrt(mrc_Now**2 + pd_Now**2)
pd_mrc_RMS.append(pd_mrc_RMS_Now)
else:
pd_mrc_RMS_Now = float('inf')
pd_mrc_RMS.append(1.0)
令我恐惧的是,这是给我的结果:
pd_diff_ratioRMS = [1.0,1.0,0.2273945352145594]
该值不应以任何可能的方式存在。我对为什么会发生这种想法没有想象力。我的代码没有错误。它检查除这对pd_diff_ratioRMS
和mrc_diff_ratioRMS
以外的所有其他情况。任何指针将不胜感激。
================================================ =========================
# fixing strange issue
for i in range(len(pd_mrc_RMS)):
mrc_Now = mrc_diff_ratioRMS[i]
pd_Now = pd_diff_ratioRMS[i]
cond1 = not(float('-inf') < mrc_Now < float('inf'))
cond2 = not(float('-inf') < pd_Now < float('inf'))
if cond1 or cond2:
pd_mrc_RMS[i] = float('inf')
pd_mrc_RMS[7] = 1.0
令我惊讶的是,pd_mrc_RMS[7]
固执地停留在0.2273945352145594
。我没有真正的想法。
再次尝试,我从np.sqrt
切换到math.sqrt
,问题仍然存在。
这些是我用于代码的导入,我正在使用Python 3.8:
from PIL import Image
from PIL import ImageChops
import numpy as np
import math
对于那些希望重现此问题的人,我正在使用Python 3.8.0。我在另一个文件中使用此代码,但仍然遇到相同的问题(math.sqrt
或np.sqrt
):
import numpy as np
import math
pd_diff_ratioRMS = [float('inf'),0.2273945352145594]
mrc_diff_ratioRMS = [float('inf'),float('inf'),float('NaN'),float('inf')]
#pd_mrc_RMS = []
pd_mrc_RMS = [1.,1.,1.]
for i in range(len(pd_diff_ratioRMS)):
mrc_Now = mrc_diff_ratioRMS[i]
pd_Now = pd_diff_ratioRMS[i]
#pd_mrc_RMS_Now = np.sqrt(mrc_Now ** 2 + pd_Now ** 2)
pd_mrc_RMS_Now = math.sqrt(mrc_Now ** 2 + pd_Now ** 2)
#pd_mrc_RMS.append(pd_mrc_RMS_Now)
pd_mrc_RMS[i] = pd_mrc_RMS_Now
pd_mrc_RMS[7] = 1.0
pd_mrc_RMS[7] = 2.0
pd_mrc_RMS[7] = 3.0
到目前为止,我唯一没有做的就是重置我的电脑。但是在另一个文件上再次看到它告诉我不会。从追加切换到工作分配仍然无效。事后直接安排也无济于事。切换Python版本也无济于事。
在新项目中运行上述代码不会显示任何错误。 0.2273945352145594
从未按预期添加到数组。我强烈怀疑PyCharm存在问题。有想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。