carray 1.4.0 → 1.5.5
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/.yardopts +32 -0
- data/LICENSE +22 -0
- data/NEWS.md +83 -0
- data/README.md +38 -18
- data/Rakefile +2 -2
- data/TODO.md +17 -0
- data/carray.gemspec +13 -18
- data/{ca_iter_block.c → ext/ca_iter_block.c} +16 -18
- data/{ca_iter_dimension.c → ext/ca_iter_dimension.c} +20 -21
- data/{ca_iter_window.c → ext/ca_iter_window.c} +12 -14
- data/{ca_obj_array.c → ext/ca_obj_array.c} +451 -176
- data/{ca_obj_bitarray.c → ext/ca_obj_bitarray.c} +18 -23
- data/{ca_obj_bitfield.c → ext/ca_obj_bitfield.c} +12 -16
- data/{ca_obj_block.c → ext/ca_obj_block.c} +47 -54
- data/{ca_obj_fake.c → ext/ca_obj_fake.c} +10 -12
- data/{ca_obj_farray.c → ext/ca_obj_farray.c} +21 -23
- data/{ca_obj_field.c → ext/ca_obj_field.c} +30 -32
- data/{ca_obj_grid.c → ext/ca_obj_grid.c} +32 -33
- data/{ca_obj_mapping.c → ext/ca_obj_mapping.c} +11 -13
- data/{ca_obj_object.c → ext/ca_obj_object.c} +40 -42
- data/{ca_obj_reduce.c → ext/ca_obj_reduce.c} +3 -5
- data/{ca_obj_refer.c → ext/ca_obj_refer.c} +44 -48
- data/{ca_obj_repeat.c → ext/ca_obj_repeat.c} +45 -47
- data/{ca_obj_select.c → ext/ca_obj_select.c} +4 -6
- data/{ca_obj_shift.c → ext/ca_obj_shift.c} +26 -28
- data/{ca_obj_transpose.c → ext/ca_obj_transpose.c} +26 -28
- data/{ca_obj_unbound_repeat.c → ext/ca_obj_unbound_repeat.c} +106 -160
- data/{ca_obj_window.c → ext/ca_obj_window.c} +33 -35
- data/{carray.h → ext/carray.h} +86 -59
- data/{carray_access.c → ext/carray_access.c} +194 -101
- data/{carray_attribute.c → ext/carray_attribute.c} +161 -207
- data/{carray_call_cfunc.c → ext/carray_call_cfunc.c} +1 -3
- data/{carray_cast.c → ext/carray_cast.c} +351 -150
- data/{carray_cast_func.rb → ext/carray_cast_func.rb} +1 -2
- data/{carray_class.c → ext/carray_class.c} +28 -36
- data/{carray_conversion.c → ext/carray_conversion.c} +63 -68
- data/{carray_copy.c → ext/carray_copy.c} +34 -50
- data/{carray_core.c → ext/carray_core.c} +75 -62
- data/ext/carray_data_type.c +66 -0
- data/{carray_element.c → ext/carray_element.c} +34 -53
- data/{carray_generate.c → ext/carray_generate.c} +71 -50
- data/{carray_iterator.c → ext/carray_iterator.c} +53 -53
- data/{carray_loop.c → ext/carray_loop.c} +77 -106
- data/{carray_mask.c → ext/carray_mask.c} +105 -114
- data/{carray_math.rb → ext/carray_math.rb} +29 -13
- data/ext/{mathfunc/carray_mathfunc.c → carray_mathfunc.c} +1 -3
- data/{carray_numeric.c → ext/carray_numeric.c} +43 -46
- data/{carray_operator.c → ext/carray_operator.c} +49 -36
- data/{carray_order.c → ext/carray_order.c} +232 -217
- data/{carray_sort_addr.c → ext/carray_sort_addr.c} +14 -21
- data/{carray_stat.c → ext/carray_stat.c} +6 -8
- data/{carray_stat_proc.rb → ext/carray_stat_proc.rb} +25 -27
- data/{carray_test.c → ext/carray_test.c} +63 -51
- data/{carray_undef.c → ext/carray_undef.c} +1 -11
- data/{carray_utils.c → ext/carray_utils.c} +12 -4
- data/{extconf.rb → ext/extconf.rb} +10 -7
- data/{mkmath.rb → ext/mkmath.rb} +2 -2
- data/{ruby_carray.c → ext/ruby_carray.c} +20 -8
- data/{ruby_ccomplex.c → ext/ruby_ccomplex.c} +2 -4
- data/{ruby_float_func.c → ext/ruby_float_func.c} +1 -3
- data/ext/version.h +16 -0
- data/{version.rb → ext/version.rb} +0 -0
- data/lib/carray.rb +51 -40
- data/lib/carray/{base/autoload.rb → autoload.rb} +1 -3
- data/lib/carray/autoload/autoload_base.rb +1 -1
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +7 -6
- data/lib/carray/autoload/autoload_gem_random.rb +8 -0
- data/lib/carray/basic.rb +191 -0
- data/lib/carray/broadcast.rb +101 -0
- data/lib/carray/compose.rb +315 -0
- data/lib/carray/construct.rb +484 -0
- data/lib/carray/convert.rb +115 -0
- data/lib/carray/info.rb +1 -3
- data/lib/carray/{base/inspect.rb → inspect.rb} +9 -11
- data/lib/carray/io/imagemagick.rb +2 -4
- data/lib/carray/{base/iterator.rb → iterator.rb} +6 -6
- data/lib/carray/mask.rb +102 -0
- data/lib/carray/{base/math.rb → math.rb} +20 -52
- data/lib/carray/math/histogram.rb +8 -10
- data/lib/carray/math/recurrence.rb +1 -3
- data/lib/carray/mkmf.rb +9 -3
- data/lib/carray/object/ca_obj_iterator.rb +1 -3
- data/lib/carray/object/ca_obj_link.rb +1 -3
- data/lib/carray/object/ca_obj_pack.rb +9 -11
- data/lib/carray/obsolete.rb +256 -0
- data/lib/carray/ordering.rb +181 -0
- data/lib/carray/{base/serialize.rb → serialize.rb} +60 -76
- data/lib/carray/{base/string.rb → string.rb} +10 -64
- data/lib/carray/{base/struct.rb → struct.rb} +19 -21
- data/lib/carray/{io/table.rb → table.rb} +1 -10
- data/lib/carray/testing.rb +51 -0
- data/lib/carray/time.rb +76 -0
- data/lib/carray/transform.rb +109 -0
- data/misc/Methods.ja.md +182 -0
- data/{NOTE → misc/NOTE} +16 -38
- data/spec/Classes/CABitfield_spec.rb +58 -0
- data/spec/Classes/CABlockIterator_spec.rb +114 -0
- data/spec/Classes/CABlock_spec.rb +205 -0
- data/spec/Classes/CAField_spec.rb +39 -0
- data/spec/Classes/CAGrid_spec.rb +75 -0
- data/spec/Classes/CAMap_spec.rb +0 -0
- data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
- data/spec/Classes/CAObject_attribute_spec.rb +33 -0
- data/spec/Classes/CAObject_spec.rb +33 -0
- data/spec/Classes/CARefer_spec.rb +93 -0
- data/spec/Classes/CARepeat_spec.rb +65 -0
- data/spec/Classes/CASelect_spec.rb +22 -0
- data/spec/Classes/CAShift_spec.rb +16 -0
- data/spec/Classes/CAStruct_spec.rb +71 -0
- data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
- data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
- data/spec/Classes/CAWindow_spec.rb +54 -0
- data/spec/Classes/CAWrap_spec.rb +8 -0
- data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
- data/spec/Classes/CScalar_spec.rb +55 -0
- data/spec/Features/feature_130_spec.rb +19 -0
- data/spec/Features/feature_attributes_spec.rb +280 -0
- data/spec/Features/feature_boolean_spec.rb +98 -0
- data/spec/Features/feature_broadcast.rb +116 -0
- data/spec/Features/feature_cast_function.rb +19 -0
- data/spec/Features/feature_cast_spec.rb +33 -0
- data/spec/Features/feature_class_spec.rb +84 -0
- data/spec/Features/feature_complex_spec.rb +42 -0
- data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
- data/spec/Features/feature_convert_spec.rb +46 -0
- data/spec/Features/feature_copy_spec.rb +123 -0
- data/spec/Features/feature_creation_spec.rb +84 -0
- data/spec/Features/feature_element_spec.rb +144 -0
- data/spec/Features/feature_extream_spec.rb +54 -0
- data/spec/Features/feature_generate_spec.rb +74 -0
- data/spec/Features/feature_index_spec.rb +69 -0
- data/spec/Features/feature_mask_spec.rb +580 -0
- data/spec/Features/feature_math_spec.rb +97 -0
- data/spec/Features/feature_order_spec.rb +146 -0
- data/spec/Features/feature_ref_store_spec.rb +209 -0
- data/spec/Features/feature_serialization_spec.rb +125 -0
- data/spec/Features/feature_stat_spec.rb +397 -0
- data/spec/Features/feature_virtual_spec.rb +48 -0
- data/spec/Features/method_eq_spec.rb +81 -0
- data/spec/Features/method_is_nan_spec.rb +12 -0
- data/spec/Features/method_map_spec.rb +54 -0
- data/spec/Features/method_max_with.rb +20 -0
- data/spec/Features/method_min_with.rb +19 -0
- data/spec/Features/method_ne_spec.rb +18 -0
- data/spec/Features/method_project_spec.rb +188 -0
- data/spec/Features/method_ref_spec.rb +27 -0
- data/spec/Features/method_round_spec.rb +11 -0
- data/spec/Features/method_s_linspace_spec.rb +48 -0
- data/spec/Features/method_s_span_spec.rb +14 -0
- data/spec/Features/method_seq_spec.rb +47 -0
- data/spec/Features/method_sort_with.rb +43 -0
- data/spec/Features/method_sorted_with.rb +29 -0
- data/spec/Features/method_span_spec.rb +42 -0
- data/spec/Features/method_wrap_readonly_spec.rb +43 -0
- data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
- data/spec/spec_all.rb +0 -1
- data/utils/convert_test.rb +73 -0
- data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
- data/{devel → utils}/guess_shape.rb +0 -0
- data/utils/{diff_method.rb → monkey_patch_methods.rb} +17 -7
- metadata +159 -206
- data/COPYING +0 -56
- data/GPL +0 -340
- data/LEGAL +0 -50
- data/TODO +0 -5
- data/carray_random.c +0 -531
- data/devel/im2col.rb +0 -17
- data/ext/calculus/carray_calculus.c +0 -931
- data/ext/calculus/carray_interp.c +0 -358
- data/ext/calculus/extconf.rb +0 -12
- data/ext/calculus/lib/math/calculus.rb +0 -119
- data/ext/calculus/lib/math/interp/adapter_interp1d.rb +0 -31
- data/ext/mathfunc/extconf.rb +0 -18
- data/ext/mathfunc/test/test_hypot.rb +0 -5
- data/ext/mathfunc/test/test_j0.rb +0 -22
- data/ext/mathfunc/test/test_jn.rb +0 -8
- data/ext/mathfunc/test/test_sph.rb +0 -9
- data/lib/carray/autoload/autoload_io_table.rb +0 -1
- data/lib/carray/autoload/autoload_math_interp.rb +0 -4
- data/lib/carray/base/basic.rb +0 -1146
- data/lib/carray/base/obsolete.rb +0 -131
- data/lib/carray/math/interp.rb +0 -57
- data/lib/carray/math/interp/adapter_gsl_spline.rb +0 -47
- data/mt19937ar.c +0 -182
- data/mt19937ar.h +0 -86
- data/rdoc_main.rb +0 -27
- data/rdoc_math.rb +0 -5
- data/rdoc_stat.rb +0 -31
- data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
- data/spec/CArray/bug/store_spec.rb +0 -27
- data/spec/CArray/index/repeat_spec.rb +0 -10
- data/spec/CArray/method/eq_spec.rb +0 -80
- data/spec/CArray/method/is_nan_spec.rb +0 -12
- data/spec/CArray/method/ne_spec.rb +0 -18
- data/spec/CArray/method/round_spec.rb +0 -11
- data/spec/CArray/object/_attribute_spec.rb +0 -32
- data/spec/CArray/object/s_new_spec.rb +0 -31
- data/spec/CArray/serialize/Serialization_spec.rb +0 -89
- data/test/test_130.rb +0 -23
- data/test/test_ALL.rb +0 -51
- data/test/test_CABitfield.rb +0 -59
- data/test/test_CABlock.rb +0 -208
- data/test/test_CAField.rb +0 -40
- data/test/test_CAGrid.rb +0 -76
- data/test/test_CAMmap.rb +0 -11
- data/test/test_CARefer.rb +0 -94
- data/test/test_CARepeat.rb +0 -66
- data/test/test_CASelect.rb +0 -23
- data/test/test_CAShift.rb +0 -17
- data/test/test_CAWindow.rb +0 -55
- data/test/test_CAWrap.rb +0 -9
- data/test/test_CComplex.rb +0 -83
- data/test/test_CScalar.rb +0 -91
- data/test/test_attribute.rb +0 -281
- data/test/test_block_iterator.rb +0 -17
- data/test/test_boolean.rb +0 -99
- data/test/test_cast.rb +0 -33
- data/test/test_class.rb +0 -85
- data/test/test_complex.rb +0 -43
- data/test/test_convert.rb +0 -79
- data/test/test_copy.rb +0 -141
- data/test/test_creation.rb +0 -85
- data/test/test_element.rb +0 -146
- data/test/test_extream.rb +0 -55
- data/test/test_generate.rb +0 -75
- data/test/test_index.rb +0 -71
- data/test/test_mask.rb +0 -578
- data/test/test_math.rb +0 -98
- data/test/test_narray.rb +0 -64
- data/test/test_order.rb +0 -147
- data/test/test_random.rb +0 -15
- data/test/test_ref_store.rb +0 -211
- data/test/test_stat.rb +0 -414
- data/test/test_struct.rb +0 -72
- data/test/test_virtual.rb +0 -49
- data/utils/create_rdoc.sh +0 -9
- data/utils/make_tgz.sh +0 -3
- data/version.h +0 -18
@@ -3,10 +3,8 @@
|
|
3
3
|
# carray/math/histogram.rb
|
4
4
|
#
|
5
5
|
# This file is part of Ruby/CArray extension library.
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
7
|
-
# the Ruby Licence.
|
8
6
|
#
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
#
|
11
9
|
# ----------------------------------------------------------------------------
|
12
10
|
|
@@ -49,7 +47,7 @@ class CAHistogram < CArray
|
|
49
47
|
raise "scales should be an array of scales"
|
50
48
|
end
|
51
49
|
|
52
|
-
|
50
|
+
ndim = scales.size
|
53
51
|
@scales = scales.clone
|
54
52
|
@scales.map! { |s| CArray.wrap_readonly(s, CA_DOUBLE) }
|
55
53
|
|
@@ -60,10 +58,10 @@ class CAHistogram < CArray
|
|
60
58
|
raise "invalid length of offset in option"
|
61
59
|
end
|
62
60
|
else
|
63
|
-
@offsets = Array.new(
|
61
|
+
@offsets = Array.new(ndim) { 0 }
|
64
62
|
end
|
65
63
|
|
66
|
-
dim = Array.new(
|
64
|
+
dim = Array.new(ndim) { |i|
|
67
65
|
case @offsets[i]
|
68
66
|
when 0
|
69
67
|
@scales[i].size
|
@@ -76,12 +74,12 @@ class CAHistogram < CArray
|
|
76
74
|
|
77
75
|
super(data_type, dim, &block)
|
78
76
|
|
79
|
-
@mid_points = Array.new(
|
77
|
+
@mid_points = Array.new(ndim) { |i|
|
80
78
|
x = (@scales[i] + @scales[i].shifted(-1))/2
|
81
79
|
x[0..-2].to_ca
|
82
80
|
}
|
83
81
|
|
84
|
-
@inner = self[*Array.new(
|
82
|
+
@inner = self[*Array.new(ndim) { |i| @offsets[i]..-2 }]
|
85
83
|
|
86
84
|
end
|
87
85
|
|
@@ -91,7 +89,7 @@ class CAHistogram < CArray
|
|
91
89
|
alias midpoints mid_points
|
92
90
|
|
93
91
|
def increment (*values)
|
94
|
-
idx = Array.new(
|
92
|
+
idx = Array.new(ndim) {|i|
|
95
93
|
vi = CArray.wrap_readonly(values[i], CA_DOUBLE)
|
96
94
|
@scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
|
97
95
|
}
|
@@ -103,7 +101,7 @@ class CAHistogram < CArray
|
|
103
101
|
val = CArray.wrap_readonly(values.pop, self.data_type)
|
104
102
|
sel = val.ne(0)
|
105
103
|
val = val[sel].to_ca
|
106
|
-
idx = Array.new(
|
104
|
+
idx = Array.new(ndim) {|i|
|
107
105
|
vi = CArray.wrap_readonly(values[i], CA_DOUBLE)[sel]
|
108
106
|
@scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
|
109
107
|
}
|
@@ -3,10 +3,8 @@
|
|
3
3
|
# carray/math/recurrence.rb
|
4
4
|
#
|
5
5
|
# This file is part of Ruby/CArray extension library.
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
7
|
-
# the Ruby Licence.
|
8
6
|
#
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
#
|
11
9
|
# ----------------------------------------------------------------------------
|
12
10
|
|
data/lib/carray/mkmf.rb
CHANGED
@@ -3,10 +3,8 @@
|
|
3
3
|
# carray/mkmf.rb
|
4
4
|
#
|
5
5
|
# This file is part of Ruby/CArray extension library.
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
7
|
-
# the Ruby Licence.
|
8
6
|
#
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
#
|
11
9
|
# ----------------------------------------------------------------------------
|
12
10
|
|
@@ -18,6 +16,13 @@ def have_carray
|
|
18
16
|
rescue LoadError
|
19
17
|
abort "Ruby/CArray is not installed"
|
20
18
|
end
|
19
|
+
$LOAD_PATH.each do |path|
|
20
|
+
if File.exist? File.join(path, 'carray.h')
|
21
|
+
dir_config("carray", path, path)
|
22
|
+
break
|
23
|
+
end
|
24
|
+
end
|
25
|
+
=begin
|
21
26
|
dir_config("carray", $sitearchdir, $sitearchdir)
|
22
27
|
if defined? Gem
|
23
28
|
if Gem::VERSION >= "1.7.0"
|
@@ -34,6 +39,7 @@ def have_carray
|
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
42
|
+
=end
|
37
43
|
status = true
|
38
44
|
status &= have_header("carray.h")
|
39
45
|
if /cygwin|mingw/ =~ RUBY_PLATFORM
|
@@ -3,10 +3,8 @@
|
|
3
3
|
# carray/object/ca_obj_iterator.rb
|
4
4
|
#
|
5
5
|
# This file is part of Ruby/CArray extension library.
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
7
|
-
# the Ruby Licence.
|
8
6
|
#
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
#
|
11
9
|
# ----------------------------------------------------------------------------
|
12
10
|
|
@@ -3,10 +3,8 @@
|
|
3
3
|
# carray/object/ca_obj_link.rb
|
4
4
|
#
|
5
5
|
# This file is part of Ruby/CArray extension library.
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
7
|
-
# the Ruby Licence.
|
8
6
|
#
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
#
|
11
9
|
# ----------------------------------------------------------------------------
|
12
10
|
|
@@ -3,10 +3,8 @@
|
|
3
3
|
# carray/object/ca_obj_pack.rb
|
4
4
|
#
|
5
5
|
# This file is part of Ruby/CArray extension library.
|
6
|
-
# You can redistribute it and/or modify it under the terms of
|
7
|
-
# the Ruby Licence.
|
8
6
|
#
|
9
|
-
# Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
#
|
11
9
|
# ----------------------------------------------------------------------------
|
12
10
|
|
@@ -22,9 +20,9 @@ class CAPack < CAObject # :nodoc:
|
|
22
20
|
|
23
21
|
def initialize (list, options={})
|
24
22
|
@list = list
|
25
|
-
@
|
26
|
-
unless @
|
27
|
-
@
|
23
|
+
@ndim = options[:ndim]
|
24
|
+
unless @ndim
|
25
|
+
@ndim = list.map{|m| m.ndim}.min
|
28
26
|
end
|
29
27
|
@names = options[:names] || [nil]*@list.size
|
30
28
|
@dim = guess_dim(list)
|
@@ -55,10 +53,10 @@ class CAPack < CAObject # :nodoc:
|
|
55
53
|
list.each do |mem|
|
56
54
|
case mem
|
57
55
|
when CArray
|
58
|
-
if mem.
|
59
|
-
raise "mem.
|
56
|
+
if mem.ndim < @ndim
|
57
|
+
raise "mem.ndim < @ndim"
|
60
58
|
else
|
61
|
-
newdim = mem.dim[0, @
|
59
|
+
newdim = mem.dim[0, @ndim]
|
62
60
|
end
|
63
61
|
if dim
|
64
62
|
unless dim == newdim
|
@@ -78,10 +76,10 @@ class CAPack < CAObject # :nodoc:
|
|
78
76
|
name = @names[i]
|
79
77
|
case mem
|
80
78
|
when CArray
|
81
|
-
if mem.
|
79
|
+
if mem.ndim == @ndim
|
82
80
|
s.member mem.data_type, name, :bytes=>mem.bytes ### anonymous member
|
83
81
|
else
|
84
|
-
dummy = Array.new(@
|
82
|
+
dummy = Array.new(@ndim){0} + [false]
|
85
83
|
s.member mem[*dummy].to_ca, name ### anonymous member
|
86
84
|
end
|
87
85
|
else
|
@@ -0,0 +1,256 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# carray/obsolete.rb
|
4
|
+
#
|
5
|
+
# This file is part of Ruby/CArray extension library.
|
6
|
+
#
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
8
|
+
#
|
9
|
+
# ----------------------------------------------------------------------------
|
10
|
+
|
11
|
+
module CA
|
12
|
+
TableMethods = CArray::TableMethods
|
13
|
+
end
|
14
|
+
|
15
|
+
class CArray
|
16
|
+
|
17
|
+
### obsolete methods
|
18
|
+
|
19
|
+
def extend_as_table (column_names)
|
20
|
+
warn "CArray#extend_as_table will be obsolete"
|
21
|
+
self.extend CArray::TableMethods
|
22
|
+
self.column_names = column_names
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns the array eliminated all the duplicated elements.
|
27
|
+
def duplicated_values
|
28
|
+
warn "CArray#duplicated_values will be obsolete"
|
29
|
+
if uniq.size == size
|
30
|
+
return []
|
31
|
+
else
|
32
|
+
hash = {}
|
33
|
+
list = []
|
34
|
+
each_with_addr do |v, addr|
|
35
|
+
if v == UNDEF
|
36
|
+
next
|
37
|
+
elsif hash[v]
|
38
|
+
list << [v, addr, hash[v]]
|
39
|
+
hash[v] += 1
|
40
|
+
else
|
41
|
+
hash[v] = 0
|
42
|
+
end
|
43
|
+
end
|
44
|
+
return list
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.summation (*dim)
|
49
|
+
warn "CArray.summation will be obsolete"
|
50
|
+
out = nil
|
51
|
+
first = true
|
52
|
+
CArray.each_index(*dim) { |*idx|
|
53
|
+
if first
|
54
|
+
out = yield(*idx)
|
55
|
+
first = false
|
56
|
+
else
|
57
|
+
out += yield(*idx)
|
58
|
+
end
|
59
|
+
}
|
60
|
+
return out
|
61
|
+
end
|
62
|
+
|
63
|
+
def by (other)
|
64
|
+
warn "CArray#by will be obsolete"
|
65
|
+
case other
|
66
|
+
when CArray
|
67
|
+
return (self[nil][nil,:*]*other[nil][:*,nil]).reshape(*(dim+other.dim))
|
68
|
+
else
|
69
|
+
return self * other
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def save_binary (filename, opt={}) # :nodoc:
|
74
|
+
warn "CArray#save_binary will be obsolete, use CArray.save"
|
75
|
+
open(filename, "w") { |io|
|
76
|
+
return Serializer.new(io).save(self, opt)
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.load_binary (filename, opt={}) # :nodoc:
|
81
|
+
warn "CArray.load_binary will be obsolete, use CArray.load"
|
82
|
+
open(filename) { |io|
|
83
|
+
return Serializer.new(io).load(opt)
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def save_binary_io (io, opt={}) # :nodoc:
|
88
|
+
warn "CArray#save_binary_io will be obsolete, use CArray.save"
|
89
|
+
return Serializer.new(io).save(self, opt)
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.load_binary_io (io, opt={}) # :nodoc:
|
93
|
+
warn "CArray#load_binary_io will be obsolete, use CArray.load"
|
94
|
+
return Serializer.new(io).load(opt)
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_binary (io="", opt={}) # :nodoc:
|
98
|
+
warn "CArray#to_binary will be obsolete, use CArray.dump"
|
99
|
+
Serializer.new(io).save(self, opt)
|
100
|
+
return io
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.from_binary (io, opt={}) # :nodoc:
|
104
|
+
warn "CArray.from_binary will be obsolete, use CArray.load"
|
105
|
+
return Serializer.new(io).load(opt)
|
106
|
+
end
|
107
|
+
|
108
|
+
def replace_value (from, to)
|
109
|
+
warn "CArray#replace_value will be obsolete"
|
110
|
+
self[:eq, from] = to
|
111
|
+
return self
|
112
|
+
end
|
113
|
+
|
114
|
+
def asign (*idx)
|
115
|
+
warn "CArray#asign will be obsolete"
|
116
|
+
self[*idx] = yield
|
117
|
+
return self
|
118
|
+
end
|
119
|
+
|
120
|
+
def fa # :nodoc:
|
121
|
+
warn "CArray#fa will be obsolete, use CArray#t"
|
122
|
+
return self.t
|
123
|
+
end
|
124
|
+
|
125
|
+
def block_iterator (*argv) # :nodoc:
|
126
|
+
warn "CArray#block_iterator will be obsolete, use CArray#blocks"
|
127
|
+
return blocks(*argv)
|
128
|
+
end
|
129
|
+
|
130
|
+
def window_iterator (*argv) # :nodoc:
|
131
|
+
warn "CArray#window_iterator will be obsolete, use CArray#windows"
|
132
|
+
return windows(*argv)
|
133
|
+
end
|
134
|
+
|
135
|
+
def rotated (*argv) # :nodoc:
|
136
|
+
warn "CArray#rotated will be obsolete, use CArray#rolled"
|
137
|
+
argv.push({:roll => Array.new(ndim){1} })
|
138
|
+
return shifted(*argv)
|
139
|
+
end
|
140
|
+
|
141
|
+
def rotate! (*argv) # :nodoc:
|
142
|
+
warn "CArray#rotate! will be obsolete, use CArray#roll!"
|
143
|
+
self[] = self.rolled(*argv)
|
144
|
+
return self
|
145
|
+
end
|
146
|
+
|
147
|
+
def rotate (*argv) # :nodoc:
|
148
|
+
warn "CArray#rotate will be obsolete, use CArray#roll"
|
149
|
+
return self.rolled(*argv).to_ca
|
150
|
+
end
|
151
|
+
|
152
|
+
def select (&block) # :nodoc:
|
153
|
+
warn "CArray#select will be obsolete"
|
154
|
+
case block.arity
|
155
|
+
when 1
|
156
|
+
return self[*yield(self)]
|
157
|
+
when -1, 0
|
158
|
+
return self[*instance_exec(&block)]
|
159
|
+
else
|
160
|
+
raise
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def transform (type, dim, opt = {}) # :nodoc:
|
165
|
+
warn("CArray#transform will be obsolete")
|
166
|
+
return refer(type, dim, opt).to_ca
|
167
|
+
end
|
168
|
+
|
169
|
+
def classify (klass, outlier = nil) # :nodoc:
|
170
|
+
warn "CArray#classify will be obsolete"
|
171
|
+
b = CArray.int32(*dim)
|
172
|
+
f = CArray.boolean(*dim) { 1 }
|
173
|
+
attach {
|
174
|
+
(klass.elements-1).times do |i|
|
175
|
+
r = f.and(self < klass[i+1])
|
176
|
+
b[r] = i
|
177
|
+
f[r] = 0
|
178
|
+
end
|
179
|
+
if outlier
|
180
|
+
b[self < klass[0]] = outlier
|
181
|
+
b[f] = outlier
|
182
|
+
else
|
183
|
+
b[self < klass[0]] = -1
|
184
|
+
b[f] = klass.elements-1
|
185
|
+
end
|
186
|
+
}
|
187
|
+
return b
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
=begin
|
195
|
+
|
196
|
+
class Numeric
|
197
|
+
|
198
|
+
[
|
199
|
+
:boolean,
|
200
|
+
:int8,
|
201
|
+
:uint8,
|
202
|
+
:int16,
|
203
|
+
:uint16,
|
204
|
+
:int32,
|
205
|
+
:uint32,
|
206
|
+
:int64,
|
207
|
+
:uint64,
|
208
|
+
:float32,
|
209
|
+
:float64,
|
210
|
+
:float128,
|
211
|
+
:cmplx64,
|
212
|
+
:cmplx128,
|
213
|
+
:cmplx256,
|
214
|
+
:byte,
|
215
|
+
:short,
|
216
|
+
:int,
|
217
|
+
:float,
|
218
|
+
:double,
|
219
|
+
:complex,
|
220
|
+
:dcomplex,
|
221
|
+
:object
|
222
|
+
].each do |name|
|
223
|
+
class_eval %{
|
224
|
+
def #{name} ()
|
225
|
+
warn "Numeric##{name} will be obsolete"
|
226
|
+
CScalar.new(#{name.inspect}) {self}
|
227
|
+
end
|
228
|
+
}
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
class CArray
|
234
|
+
def histogram (klass)
|
235
|
+
c = CArray.int32(klass.elements-1)
|
236
|
+
f = CArray.boolean(*dim) { 1 }
|
237
|
+
attach {
|
238
|
+
k = 0
|
239
|
+
r = f.and(self < klass[0])
|
240
|
+
f[r] = 0
|
241
|
+
(klass.elements-1).times do |i|
|
242
|
+
r = f.and(self < klass[i+1])
|
243
|
+
c[k] = r.count_true
|
244
|
+
f[r] = 0
|
245
|
+
k+=1
|
246
|
+
end
|
247
|
+
}
|
248
|
+
return c
|
249
|
+
end
|
250
|
+
|
251
|
+
def self.load_from_file (filename, data_type, dim, opt={}) # :nodoc:
|
252
|
+
raise "Sorry, CArray.load_from_file is depleted"
|
253
|
+
end
|
254
|
+
|
255
|
+
end
|
256
|
+
=end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# carray/ordering.rb
|
4
|
+
#
|
5
|
+
# This file is part of Ruby/CArray extension library.
|
6
|
+
#
|
7
|
+
# Copyright (C) 2005-2020 Hiroki Motoyoshi
|
8
|
+
#
|
9
|
+
# ----------------------------------------------------------------------------
|
10
|
+
|
11
|
+
class CArray
|
12
|
+
|
13
|
+
# reversed
|
14
|
+
def reversed
|
15
|
+
return self[*([-1..0]*ndim)]
|
16
|
+
end
|
17
|
+
|
18
|
+
# roll / shift
|
19
|
+
|
20
|
+
def shift! (*argv, &block)
|
21
|
+
self[] = self.shifted(*argv, &block)
|
22
|
+
return self
|
23
|
+
end
|
24
|
+
|
25
|
+
def shift (*argv, &block)
|
26
|
+
return self.shifted(*argv, &block).to_ca
|
27
|
+
end
|
28
|
+
|
29
|
+
def rolled (*argv)
|
30
|
+
argv.push({:roll => Array.new(ndim){1} })
|
31
|
+
return shifted(*argv)
|
32
|
+
end
|
33
|
+
|
34
|
+
def roll! (*argv)
|
35
|
+
self[] = self.rolled(*argv)
|
36
|
+
return self
|
37
|
+
end
|
38
|
+
|
39
|
+
def roll (*argv)
|
40
|
+
return self.rolled(*argv).to_ca
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns the reference which elements are sorted by the comparison method
|
44
|
+
# given as block
|
45
|
+
def sorted_by (type=nil, opt={}, &block)
|
46
|
+
type, bytes =
|
47
|
+
CArray.guess_type_and_bytes(type||data_type, opt[:bytes]||bytes)
|
48
|
+
cmpary = convert(type, :bytes=>bytes, &block)
|
49
|
+
return self[cmpary.sort_addr]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns the array which elements are sorted by the comparison method
|
53
|
+
# given as block
|
54
|
+
def sort_by (type=nil, opt={}, &block)
|
55
|
+
type, bytes =
|
56
|
+
CArray.guess_type_and_bytes(type||data_type, opt[:bytes]||bytes)
|
57
|
+
cmpary = convert(type, :bytes=>bytes, &block)
|
58
|
+
return self[cmpary.sort_addr].to_ca
|
59
|
+
end
|
60
|
+
|
61
|
+
def sorted_with (*others)
|
62
|
+
addr = sort_addr
|
63
|
+
([self] + others).map { |x| x[addr] }
|
64
|
+
end
|
65
|
+
|
66
|
+
def sort_with (*others)
|
67
|
+
addr = sort_addr
|
68
|
+
([self] + others).map { |x| x[addr].to_ca }
|
69
|
+
end
|
70
|
+
|
71
|
+
def max_by (&block)
|
72
|
+
if empty?
|
73
|
+
return UNDEF
|
74
|
+
else
|
75
|
+
addr = convert(:object, &block).max_addr
|
76
|
+
return self[addr]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def max_with (*others)
|
81
|
+
if empty?
|
82
|
+
return ([self] + others).map { |x| UNDEF }
|
83
|
+
else
|
84
|
+
addr = max_addr
|
85
|
+
return ([self] + others).map { |x| x[addr] }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def min_by (&block)
|
90
|
+
if empty?
|
91
|
+
return UNDEF
|
92
|
+
else
|
93
|
+
addr = convert(:object, &block).min_addr
|
94
|
+
return self[addr]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def min_with (*others)
|
99
|
+
if empty?
|
100
|
+
return ([self] + others).map { |x| UNDEF }
|
101
|
+
else
|
102
|
+
addr = min_addr
|
103
|
+
return ([self] + others).map { |x| x[addr] }
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def range
|
108
|
+
return (self.min)..(self.max)
|
109
|
+
end
|
110
|
+
|
111
|
+
def nlargest (n)
|
112
|
+
obj = self.to_ca
|
113
|
+
list = []
|
114
|
+
n.times do |i|
|
115
|
+
k = obj.max_addr
|
116
|
+
list << obj[k]
|
117
|
+
obj[k] = UNDEF
|
118
|
+
end
|
119
|
+
list.to_ca.to_type(data_type)
|
120
|
+
end
|
121
|
+
|
122
|
+
def nlargest_addr (n)
|
123
|
+
obj = self.to_ca
|
124
|
+
list = []
|
125
|
+
n.times do |i|
|
126
|
+
k = obj.max_addr
|
127
|
+
list << k
|
128
|
+
obj[k] = UNDEF
|
129
|
+
end
|
130
|
+
CA_INT64(list)
|
131
|
+
end
|
132
|
+
|
133
|
+
def nsmallest (n)
|
134
|
+
obj = self.to_ca
|
135
|
+
list = []
|
136
|
+
n.times do |i|
|
137
|
+
k = obj.min_addr
|
138
|
+
list << obj[k]
|
139
|
+
obj[k] = UNDEF
|
140
|
+
end
|
141
|
+
list.to_ca.to_type(data_type)
|
142
|
+
end
|
143
|
+
|
144
|
+
def nsmallest_addr (n)
|
145
|
+
obj = self.to_ca
|
146
|
+
list = []
|
147
|
+
n.times do |i|
|
148
|
+
k = obj.min_addr
|
149
|
+
list << k
|
150
|
+
obj[k] = UNDEF
|
151
|
+
end
|
152
|
+
CA_INT64(list)
|
153
|
+
end
|
154
|
+
|
155
|
+
def order (dir = 1)
|
156
|
+
if dir >= 0 ### ascending order
|
157
|
+
if has_mask?
|
158
|
+
obj = template(:int32) { UNDEF }
|
159
|
+
sel = is_not_masked
|
160
|
+
obj[sel][self[sel].sort_addr].seq!
|
161
|
+
return obj
|
162
|
+
else
|
163
|
+
obj = template(:int32)
|
164
|
+
obj[sort_addr].seq!
|
165
|
+
return obj
|
166
|
+
end
|
167
|
+
else ### descending order
|
168
|
+
if has_mask?
|
169
|
+
obj = template(:int32) { UNDEF}
|
170
|
+
sel = is_not_masked
|
171
|
+
obj[sel][self[sel].sort_addr.reversed].seq!
|
172
|
+
return obj
|
173
|
+
else
|
174
|
+
obj = template(:int32)
|
175
|
+
obj[sort_addr.reversed].seq!
|
176
|
+
return obj
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|