Class: CAHistogram

Inherits:
CArray show all
Defined in:
lib/carray/math/histogram.rb

Constant Summary

Constants inherited from CArray

CArray::DComplex, CArray::DEFAULT_GC_INTERVAL, CArray::DFloat, CArray::DataType, CArray::HAVE_COMPLEX, CArray::RObject, CArray::SComplex, CArray::SFloat, CArray::TypeSymbol, CArray::VERSION, CArray::VERSION_CODE, CArray::VERSION_DATE, CArray::VERSION_MAJOR, CArray::VERSION_MINOR, CArray::VERSION_TEENY

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from CArray

#<=>, #==, #[], #[]=, #__attach__, #__detach__, __new__, __new_fixlen__, #__sync__, _scan_float, _scan_int, #addr2index, #address, #all_close?, #all_equal?, #all_equiv?, #all_masked?, #ancestors, #anomaly, #any_close?, #any_equal?, #any_equiv?, #any_masked?, #arg, #as_boolean, #as_cmplx128, #as_cmplx256, #as_cmplx64, #as_fixlen, #as_float128, #as_float32, #as_float64, #as_int16, #as_int32, #as_int64, #as_int8, #as_object, #as_type, #as_uint16, #as_uint32, #as_uint64, #as_uint8, #asign, #attach, attach, #attach!, attach!, #attached?, #attribute, #attribute=, #between, big_endian?, #bin, bind, #bitarray, #bitfield, #bits, #block_iterator, #blocks, boolean, #boolean, #boolean?, broadcast, #broadcast_to, #bsearch, #bsearch_index, #by, byte, #bytes, cast, cast_self_or_other, #cast_with, #classes, #classify, #clip, cmplx128, #cmplx128, #cmplx256, cmplx256, cmplx64, #cmplx64, #code, #coerce, #collect!, #collect_addr!, #collect_index!, #collect_with_addr!, #collect_with_index!, combine, #compact, #compacted, complex, #complex?, composite, #contains, #convert, #correlation, #count, #count_close, #count_equal, #count_equiv, #count_false, #count_masked, #count_not_masked, #count_true, #covariance, #covariancep, #cummax, #cummin, #cumprod, #cumwsum, #data_class, #data_type, data_type?, data_type_name, #data_type_name, dcomplex, #deg_180, #deg_180!, #deg_360, #deg_360!, #delete_block, #dim, #dim0, #dim1, #dim2, #dim3, #display_by_magick, double, dump, #dump_binary, #duplicated_values, #each, #each_addr, each_index, #each_index, #each_with_addr, #each_with_index, #elem_copy, #elem_decr, #elem_fetch, #elem_incr, #elem_masked?, #elem_store, #elem_swap, #elements, #empty?, endian, #entity?, #extend_as_table, #fa, #fake, #false, #farray, #field, #fields, #fields_at, #fill, #fill_copy, #first, #fixlen, fixlen, #fixlen?, #flatten, #flattened, float, float128, #float128, #float32, float32, #float64, float64, #float?, #freeze, from_binary, #from_bit_string, from_bit_string, gc_interval, gc_interval=, #gradate, #grade, #grid, guess_array_shape, guess_type_and_bytes, #has_attribute?, #has_data_class?, #has_mask?, #hash, #imag, #imag=, #incr_addr, #index, #index2addr, #indices, #inherit_mask, #inherit_mask_replace, #initialize_copy, #insert_block, #inspect, int, int16, #int16, int32, #int32, int64, #int64, int8, #int8, #integer?, #invert_mask, #is_close, #is_divisible, #is_equiv, #is_masked, #is_not_divisible, #is_not_masked, #is_real, #join, join, #last, #length, little_endian?, load, #load_binary, load_binary, load_binary_io, load_by_magick, #map, #map!, #map_addr!, #map_index!, #map_with_addr!, #map_with_index!, #marshal_dump, #marshal_load, #mask, #mask=, #mask_array?, #maskout, #maskout!, #matchup, #matchup_nearest, #max_by, #max_with, #median, mem_usage, #members, merge, meshgrid, #min_by, #min_with, #mul_add, #ndim, #nlargest, #nlargest_addr, #none_close?, #none_equal?, #none_equiv?, #normalize_index, #nsmallest, #nsmallest_addr, #numeric?, #obj_type, object, #object, #object?, #order, pack, #parent, #paste, #percentile, pickup, #project, #pull, #pulled, #quantile, #quantize, #quo, #rad_2pi, #rad_2pi!, #rad_pi, #rad_pi!, #random, #randomn, #randomn!, #range, #rank, #read_only?, #real, #real=, #real?, #recurrence, #recurrence!, #refer, #replace_value, reset_gc_interval, #reshape, #resize, #reverse, #reverse!, #reversed, #roll, #roll!, #rolled, #root_array, #rotate, #rotate!, #rotated, #same_shape?, save, #save_binary, #save_binary_io, #save_by_magick, #scalar?, #scale, #scale!, scan_index, #search, #search_index, #search_nearest, #search_nearest_index, #select, #seq, #seq!, #set, #shape, #shift, #shift!, #shifted, short, #sign, #size, sizeof, #sort, #sort!, #sort_addr, #sort_by, #sort_with, #sorted_by, #sorted_with, #span, span, #span!, #split, #st, #str_bytesize, #str_capitalize, #str_center, #str_chomp, #str_chop, #str_chr, #str_clear, #str_count, #str_delete, #str_delete_prefix, #str_delete_suffix, #str_downcase, #str_dump, #str_encode, #str_encoding, #str_extract, #str_force_encoding, #str_format, #str_gsub, #str_includes, #str_index, #str_intern, #str_is_empty, #str_is_end_with, #str_is_start_with, #str_len, #str_ljust, #str_lstrip, #str_matches, #str_rindex, #str_rjust, #str_rstrip, #str_scrub, #str_size, #str_strip, #str_strptime, #str_sub, #str_swapcase, #str_to_datetime, #str_to_f, #str_to_i, #str_to_r, #str_to_time, #str_upcase, summation, #swap_bytes, #swap_bytes!, #t, #template, #test, #test_ca_to_cptr, #time_ajd, #time_day, #time_format, #time_hour, #time_is_leap, #time_jd, #time_minute, #time_month, #time_second, #time_strftime, #time_year, #to_a, #to_binary, #to_bit_string, #to_ca, #to_column, #to_row, #to_s, #to_type, #transform, #transpose, #transpose!, #transposed, #trim, #trim!, #true, #uint16, uint16, #uint32, uint32, #uint64, uint64, #uint8, uint8, #unbound_repeat, #uniq, #unmask, #unmask_copy, #unset, #unsigned?, #valid_addr?, #valid_index?, #value, #value_array?, #variance, #variancep, #virtual?, #where, #where_range, #window, #window_iterator, #windows, #wmean, wrap, wrap_readonly, wrap_writable, #wsum

Methods included from CArray::DataTypeExtension

#arange, #eye, #full, #identity, #linspace, #ones, #zeros

Constructor Details

#initialize(*argv, &block) ⇒ CAHistogram

Returns a new instance of CAHistogram.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/carray/math/histogram.rb', line 27

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

Instance Attribute Details

#include_lowestObject (readonly)

Returns the value of attribute include_lowest.



88
89
90
# File 'lib/carray/math/histogram.rb', line 88

def include_lowest
  @include_lowest
end

#include_upperObject (readonly)

Returns the value of attribute include_upper.



88
89
90
# File 'lib/carray/math/histogram.rb', line 88

def include_upper
  @include_upper
end

#innerObject (readonly)

Returns the value of attribute inner.



89
90
91
# File 'lib/carray/math/histogram.rb', line 89

def inner
  @inner
end

#mid_pointsObject (readonly) Also known as: midpoints

Returns the value of attribute mid_points.



89
90
91
# File 'lib/carray/math/histogram.rb', line 89

def mid_points
  @mid_points
end

#offsetsObject (readonly)

Returns the value of attribute offsets.



88
89
90
# File 'lib/carray/math/histogram.rb', line 88

def offsets
  @offsets
end

#scalesObject (readonly)

Returns the value of attribute scales.



88
89
90
# File 'lib/carray/math/histogram.rb', line 88

def scales
  @scales
end

Instance Method Details

#add(*values) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/carray/math/histogram.rb', line 102

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) ⇒ Object



93
94
95
96
97
98
99
100
# File 'lib/carray/math/histogram.rb', line 93

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