GÜNCELLEME (gerçek hatası)
uyarı. İşte bütünüyle benim işlevi (... hatlarının bazı belirsiz ve kafa karıştırıcı ise üzgün) 'dirnumpy "Boş dilim ortalaması." Hata nereden geldiğini ben misidentified
Sorunu araştırdık ve (değil bu yazı) aşağıda nakledilir cevabını, buldukdef 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
.
hatası (saçma sahte hata)
#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])
zaman
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.
O farklı doğru numpy.mean
çalışır bunu yazdırırken görünür, fakat ediyorum çıktı üretti onu bir değere ata. Herhangi bir geri bildirim çok takdir edilecektir. Sorumu okumak için zaman ayırdığınız için teşekkür ederim.
Kısacası
Kısa açıklama, ben bilimsel veri ve kod parçasını işlemek için bir kod yazıyorum yaklaşık 20 değerin ortalamasını alarak içerir.
#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])
Bu kod, "Boş dilim ortalaması" olan bir sayı döndürür. uyarı ve annoyingly değerli çıkışımda yazdırır! Ben denemek ve örneğin here görüldüğü gibi uyarı kaynağını izini karar, bu yüzden aşağıdaki snipped Traceback döndü kodumu, üstündeki
import warnings
warnings.simplefilter("error")
yerleştirilen:
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.
Traceback'in yaklaşık 2/3'ünü atladım çünkü veri okunabilirliğini veya boyutunu etkilemeyen yaklaşık 5 zor-açıklamalı işlevden geçiyor.
Yaniright_avg
gerçekten boş dilimin bir
numpy.mean
uğraş olmadığını görmek için tüm operasyonu yazdırmak için karar ... Ve şeyler
gerçekten garip var bu.
Hata, "numpy.mean (giriş [sağa: sağ + 20]) ikinci çağrıldığında," girdi [sağa: sağ + 20]] boş olduğunu söylüyor. "Input" değerini değiştiren birinci ve ikinci aramalar arasında bir kod bulunmalıdır. – unutbu
'input' ** değerleri ** dediğiniz gibi değiştiriliyor, ancak aynı kodu daha önce çağırılmadan önce yazdığımda hata yok. "Left_avg" öğesini nasıl atadığımla ilgili bir sorun olduğunu düşünüyor musunuz? – boof
Haklıymışsın! Kodun bir kısmı daha sonra "right_avg" işlevini taşıyan aynı işlevde bulunur. İnsanların zamanını boşa harcamamak için ana parçayı güncelledim. Utanç verici ... – boof