class CAHistogram
Attributes
include_lowest[R]
include_upper[R]
inner[R]
mid_points[R]
midpoints[R]
offsets[R]
scales[R]
Public Class Methods
new(*argv, &block)
click to toggle source
Calls superclass method
# File lib/carray/math/histogram.rb, line 25 def initialize (*argv, &block) case argv.first when Integer, String, Symbol data_type = argv.shift else data_type = CA_INT32 end scales = argv.shift opt = argv.shift || {} option = { :include_upper => false, :include_lowest => true, :offsets => nil, }.update( opt ) @include_upper = option[:include_upper] @include_lowest = option[:include_lowest] unless scales.kind_of?(Array) raise "scales should be an array of scales" end ndim = scales.size @scales = scales.clone @scales.map! { |s| CArray.wrap_readonly(s, CA_DOUBLE) } if option[:offsets] if option[:offsets].size == scales.size @offsets = option[:offsets] else raise "invalid length of offset in option" end else @offsets = Array.new(ndim) { 0 } end dim = Array.new(ndim) { |i| case @offsets[i] when 0 @scales[i].size when 1 @scales[i].size + 1 else raise "invalid offset value" end } super(data_type, dim, &block) @mid_points = Array.new(ndim) { |i| x = (@scales[i] + @scales[i].shifted(-1))/2 x[0..-2].to_ca } @inner = self[*Array.new(ndim) { |i| @offsets[i]..-2 }] end
Public Instance Methods
add(*values)
click to toggle source
# File lib/carray/math/histogram.rb, line 100 def add (*values) val = CArray.wrap_readonly(values.pop, self.data_type) sel = val.ne(0) val = val[sel].to_ca idx = Array.new(ndim) {|i| vi = CArray.wrap_readonly(values[i], CA_DOUBLE)[sel] @scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca } index2addr(*idx).each_with_addr do |addr, i| self[addr] += val[i] end self end
increment(*values)
click to toggle source
# File lib/carray/math/histogram.rb, line 91 def increment (*values) idx = Array.new(ndim) {|i| vi = CArray.wrap_readonly(values[i], CA_DOUBLE) @scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca } incr_addr(index2addr(*idx)) self end