mini_histogram 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/mini_histogram.rb +35 -28
- data/lib/mini_histogram/version.rb +1 -1
- data/mini_histogram.gemspec +3 -0
- metadata +15 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f74ffb350c63f9f26ea90db6a41c8135c3b2e180de663a1747d649a47e8e2df4
|
|
4
|
+
data.tar.gz: 3a69ae4f5a0f4d64d830f7a39b0b79f3ab011cae5cf7479328ee8a907b5f7820
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 477c617614b9ed9202dc2f42aa6c3571a44651173ffb7357c5650aefedaeb599b9a98b38daa107e9c2002f8c59700cc2e349ddb2ead5412e99c339d37f4f6691
|
|
7
|
+
data.tar.gz: a6dc9302632ab19b9264c5787d31fe8387dc9130669ec0fe2ae7860bab6fbcb10fee9d712943aa00a3a41167873fee214df9c07c5af2101dc5914da5662f9472
|
data/CHANGELOG.md
CHANGED
data/lib/mini_histogram.rb
CHANGED
|
@@ -21,12 +21,13 @@ class MiniHistogram
|
|
|
21
21
|
class Error < StandardError; end
|
|
22
22
|
attr_reader :array, :left_p, :max
|
|
23
23
|
|
|
24
|
-
def initialize(array, left_p:
|
|
24
|
+
def initialize(array, left_p: true, edges: nil)
|
|
25
25
|
@array = array
|
|
26
26
|
@left_p = left_p
|
|
27
27
|
@edges = edges
|
|
28
28
|
@weights = nil
|
|
29
|
-
|
|
29
|
+
|
|
30
|
+
@min, @max = array.minmax
|
|
30
31
|
end
|
|
31
32
|
|
|
32
33
|
def edges_min
|
|
@@ -42,7 +43,7 @@ class MiniHistogram
|
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
def closed
|
|
45
|
-
:left
|
|
46
|
+
@left_p ? :left : :right
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
# Sets the edge value to something new,
|
|
@@ -54,6 +55,8 @@ class MiniHistogram
|
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
def bin_size
|
|
58
|
+
return 0 if edges.length <= 1
|
|
59
|
+
|
|
57
60
|
edges[1] - edges[0]
|
|
58
61
|
end
|
|
59
62
|
|
|
@@ -86,6 +89,7 @@ class MiniHistogram
|
|
|
86
89
|
# 4 values between 4.0 and 6.0 and three values between 10.0 and 12.0
|
|
87
90
|
def weights
|
|
88
91
|
return @weights if @weights
|
|
92
|
+
return @weights = [] if array.empty?
|
|
89
93
|
|
|
90
94
|
lo = edges.first
|
|
91
95
|
step = edges[1] - edges[0]
|
|
@@ -118,16 +122,18 @@ class MiniHistogram
|
|
|
118
122
|
def edges
|
|
119
123
|
return @edges if @edges
|
|
120
124
|
|
|
121
|
-
|
|
122
|
-
lo = array.min
|
|
125
|
+
return @edges = [0.0] if array.empty?
|
|
123
126
|
|
|
124
|
-
|
|
127
|
+
lo = @min
|
|
128
|
+
hi = @max
|
|
129
|
+
|
|
130
|
+
nbins = sturges.to_f
|
|
125
131
|
|
|
126
132
|
if hi == lo
|
|
127
|
-
start =
|
|
133
|
+
start = lo
|
|
128
134
|
step = 1.0
|
|
129
135
|
divisor = 1.0
|
|
130
|
-
len = 1
|
|
136
|
+
len = 1
|
|
131
137
|
else
|
|
132
138
|
bw = (hi - lo) / nbins
|
|
133
139
|
lbw = Math.log10(bw)
|
|
@@ -163,31 +169,32 @@ class MiniHistogram
|
|
|
163
169
|
start = (lo * divisor).floor
|
|
164
170
|
len = (hi * divisor - start).ceil
|
|
165
171
|
end
|
|
172
|
+
end
|
|
166
173
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
while (start + (len - 1)*step)/divisor <= hi
|
|
173
|
-
len += 1
|
|
174
|
-
end
|
|
175
|
-
else
|
|
176
|
-
while lo <= start/divisor
|
|
177
|
-
start -= step
|
|
178
|
-
end
|
|
179
|
-
while (start + (len - 1)*step)/divisor < hi
|
|
180
|
-
len += 1
|
|
181
|
-
end
|
|
174
|
+
if left_p
|
|
175
|
+
while (lo < start/divisor)
|
|
176
|
+
start -= step
|
|
182
177
|
end
|
|
183
178
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
179
|
+
while (start + (len - 1)*step)/divisor <= hi
|
|
180
|
+
len += 1
|
|
181
|
+
end
|
|
182
|
+
else
|
|
183
|
+
while lo <= start/divisor
|
|
184
|
+
start -= step
|
|
188
185
|
end
|
|
189
|
-
|
|
186
|
+
while (start + (len - 1)*step)/divisor < hi
|
|
187
|
+
len += 1
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
@edges = []
|
|
192
|
+
len.times.each do
|
|
193
|
+
@edges << start/divisor
|
|
194
|
+
start += step
|
|
190
195
|
end
|
|
196
|
+
|
|
197
|
+
return @edges
|
|
191
198
|
end
|
|
192
199
|
alias :edge :edges
|
|
193
200
|
|
data/mini_histogram.gemspec
CHANGED
|
@@ -26,4 +26,7 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.require_paths = ["lib"]
|
|
27
27
|
|
|
28
28
|
spec.add_development_dependency "m"
|
|
29
|
+
# Used for comparison testing, but only supports Ruby 2.4+
|
|
30
|
+
# spec.add_development_dependency "enumerable-statistics"
|
|
31
|
+
spec.add_development_dependency "benchmark-ips"
|
|
29
32
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mini_histogram
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- schneems
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: benchmark-ips
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
27
41
|
description: It makes histograms out of Ruby data. How cool is that!? Pretty cool
|
|
28
42
|
if you ask me.
|
|
29
43
|
email:
|