बिनिंग कार्यों के संबंध में, मुझे अब तक पेश किए गए कार्यों के परिणाम की उम्मीद नहीं थी। अर्थात्, यदि मेरी सीमा 0.001 है, तो ये फ़ंक्शन 0.0005 बिंदुओं पर डिब्बे को केंद्रित कर रहे थे, जबकि मुझे लगता है कि यह डिब्बे 0.001 सीमाओं पर केंद्रित होना अधिक सहज है।
दूसरे शब्दों में, मैं करना चाहूंगा
Bin 0.001 contain data from 0.0005 to 0.0014
Bin 0.002 contain data from 0.0015 to 0.0024
...
बिनिंग फंक्शन मैं साथ आया हूं
my_bin(x,width) = width*(floor(x/width+0.5))
यहां कुछ बिन कार्यों की तुलना करने के लिए यहां एक स्क्रिप्ट दी गई है:
rint(x) = (x-int(x)>0.9999)?int(x)+1:int(x)
bin(x,width) = width*rint(x/width) + width/2.0
binc(x,width) = width*(int(x/width)+0.5)
mitar_bin(x,width) = width*floor(x/width) + width/2.0
my_bin(x,width) = width*(floor(x/width+0.5))
binwidth = 0.001
data_list = "-0.1386 -0.1383 -0.1375 -0.0015 -0.0005 0.0005 0.0015 0.1375 0.1383 0.1386"
my_line = sprintf("%7s %7s %7s %7s %7s","data","bin()","binc()","mitar()","my_bin()")
print my_line
do for [i in data_list] {
iN = i + 0
my_line = sprintf("%+.4f %+.4f %+.4f %+.4f %+.4f",iN,bin(iN,binwidth),binc(iN,binwidth),mitar_bin(iN,binwidth),my_bin(iN,binwidth))
print my_line
}
और यहाँ आउटपुट है
data bin() binc() mitar() my_bin()
-0.1386 -0.1375 -0.1375 -0.1385 -0.1390
-0.1383 -0.1375 -0.1375 -0.1385 -0.1380
-0.1375 -0.1365 -0.1365 -0.1375 -0.1380
-0.0015 -0.0005 -0.0005 -0.0015 -0.0010
-0.0005 +0.0005 +0.0005 -0.0005 +0.0000
+0.0005 +0.0005 +0.0005 +0.0005 +0.0010
+0.0015 +0.0015 +0.0015 +0.0015 +0.0020
+0.1375 +0.1375 +0.1375 +0.1375 +0.1380
+0.1383 +0.1385 +0.1385 +0.1385 +0.1380
+0.1386 +0.1385 +0.1385 +0.1385 +0.1390