gpt4 book ai didi

python - numpy "Mean of empty slice."警告

转载 作者:太空狗 更新时间:2023-10-30 00:02:24 26 4
gpt4 key购买 nike

更新(真正的错误)

我错误地识别了错误的来源。这是我的完整功能(抱歉,如果某些行晦涩难懂...)

def removeLines(input,CRVAL1,CDELT1): #Masks out the Balmer lines from the spectrum
#Numbers 4060, 4150, 4300, 4375, 4800, and 4950 obtained from fit_RVs.pro.
#Other numbers obtained from the Balmer absorption series lines

for i in range(0,len(lineWindows),2):
left = toIndex(lineWindows[i],CRVAL1,CDELT1)
right = toIndex(lineWindows[i+1],CRVAL1,CDELT1)

print "left = ", left
print "right = ", right
print "20 from right =\n", input[right:right+20]
print "mean of 20 = ", numpy.mean(input[right:right+20])

#Find the averages on the left and right sides
left_avg = numpy.mean(input[left-20:left])
right_avg = numpy.mean(input[right:right+20]) #<--- NOT here

print "right_avg = ", right_avg

#Find the slope between the averages
slope = (left_avg - right_avg)/(left - right)

#Find the y-intercept of the line conjoining the averages
bval = ((left_avg - slope*left) + (right_avg - slope*right)) / 2

for j in range(left,right): #Redefine the data to follow the line conjoining
input[j] = slope*j + bval #the sides of the peaks

left = int(input[0])
left_avg = int(input[0])
right = toIndex(lineWindows[0],CRVAL1,CDELT1)
right_avg = numpy.mean(input[right:right+20]) #<---- THIS IS WHERE IT IS!
slope = (left_avg - right_avg)/(left - right)
bval = ((left_avg - slope*left) + (right_avg - slope*right)) / 2

for i in range(left, right):
input[i] = slope*i + bval
return input

我调查了这个问题并找到了答案,答案发布在下面(不在这篇文章中)。


错误(愚蠢的错误)

#left  = An index in the data (on the 'left' side)
#right = An index in the data (on the 'right' side)
#input = The data array

print "left = ", left
print "right = ", right
print "20 from right =\n", input[right:right+20]
print "mean of 20 = ", numpy.mean(input[right:right+20])

#Find the averages on the left and right sides
left_avg = numpy.mean(input[left-20:left])
right_avg = numpy.mean(input[right:right+20])

产生输出

left =  1333
right = 1490
20 from right =
[ 0.14138737 0.14085886 0.14038289 0.14045525 0.14078836 0.14083192
0.14072289 0.14082283 0.14058594 0.13977806 0.13955595 0.13998236
0.1400764 0.1399636 0.14025062 0.14074247 0.14094831 0.14078569
0.14001536 0.13895717]
mean of 20 = 0.140395
Traceback (most recent call last):
...
File "getRVs.py", line 201, in removeLines
right_avg = numpy.mean(input[right:right+20])
File "C:\Users\MyName\Anaconda\lib\site-packages\numpy\core\fromnumeric.py", line 2735, in mean
out=out, keepdims=keepdims)
File "C:\Users\MyName\Anaconda\lib\site-packages\numpy\core\_methods.py", line 59, in _mean
warnings.warn("Mean of empty slice.", RuntimeWarning)
RuntimeWarning: Mean of empty slice.

看起来 numpy.mean 在我打印时运行正确,但在我将其分配给一个值时却不同。任何反馈将不胜感激。感谢您花时间阅读我的问题。


简要说明

简而言之,我正在编写一段代码来处理科学数据,部分代码涉及取大约 20 个值的平均值。

#left  = An index in the data (on the 'left' side)
#right = An index in the data (on the 'right' side)
#input = The data array

#Find the averages on the left and right sides
left_avg = numpy.mean(input[left-20:left])
right_avg = numpy.mean(input[right:right+20])

这段代码返回一个 numpy 的“空切片的平均值”。警告并烦人地将其打印在我宝贵的输出中!我决定尝试追踪警告的来源,如 here 所示,例如,所以我放置了

import warnings
warnings.simplefilter("error")

在我的代码顶部,然后返回以下片段的 Traceback:

  File "getRVs.py", line 201, in removeLines
right_avg = numpy.mean(input[right:right+20])
File "C:\Users\MyName\Anaconda\lib\site-packages\numpy\core\fromnumeric.py", line 2735, in mean
out=out, keepdims=keepdims)
File "C:\Users\MyName\Anaconda\lib\site-packages\numpy\core\_methods.py", line 59, in _mean
warnings.warn("Mean of empty slice.", RuntimeWarning)
RuntimeWarning: Mean of empty slice.

我省略了大约 2/3 的 Traceback,因为它通过了大约 5 个难以解释的函数,这些函数不影响数据的可读性或大小。

所以我决定打印出整个操作,看看 right_avg 是否真的在尝试空切片的 numpy.mean ... em>真的很奇怪。

最佳答案

我无法重现您的错误。您使用的是最新的 numpy 版本吗?但是,您可以通过使用关键字 ignore 来抑制警告(请参阅 https://docs.python.org/2/library/warnings.html#temporarily-suppressing-warnings)

此错误通常意味着向函数传递了一个空列表。

>>> a = []

>>> import numpy
>>> numpy.mean(a)
/shahlab/pipelines/apps_centos6/Python-2.7.10/lib/python2.7/site-packages/numpy/core/_methods.py:59: RuntimeWarning: Mean of empty slice.
warnings.warn("Mean of empty slice.", RuntimeWarning)
/shahlab/pipelines/apps_centos6/Python-2.7.10/lib/python2.7/site-packages/numpy/core/_methods.py:71: RuntimeWarning: invalid value encountered in double_scalars
ret = ret.dtype.type(ret / rcount)
nan
>>> print numpy.mean(a)
nan

>>> import warnings
>>> warnings.simplefilter("ignore")
>>> numpy.mean(a)
nan

>>> a=[ 0.14138737, 0.14085886, 0.14038289, 0.14045525, 0.14078836, 0.14083192, 0.14072289, 0.14082283, 0.14058594, 0.13977806, 0.13955595, 0.13998236, 0.1400764, 0.1399636, 0.14025062, 0.14074247, 0.14094831, 0.14078569, 0.14001536, 0.13895717]
>>> numpy.mean(a)
0.140394615
>>> x = numpy.mean(a)
>>> print x
0.140394615
>>> numpy.__version__
'1.9.2'

希望对您有所帮助。

关于python - numpy "Mean of empty slice."警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814837/

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