carray 1.1.4 → 1.1.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.
Files changed (231) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +56 -0
  3. data/GPL +340 -0
  4. data/Gemfile +9 -0
  5. data/Gemfile.lock +33 -0
  6. data/LEGAL +50 -0
  7. data/NOTE +73 -0
  8. data/Rakefile +20 -0
  9. data/TODO +5 -0
  10. data/ca_iter_block.c +242 -0
  11. data/ca_iter_dimension.c +287 -0
  12. data/ca_iter_window.c +202 -0
  13. data/ca_obj_array.c +1189 -0
  14. data/ca_obj_bitarray.c +523 -0
  15. data/ca_obj_bitfield.c +636 -0
  16. data/ca_obj_block.c +885 -0
  17. data/ca_obj_fake.c +405 -0
  18. data/ca_obj_farray.c +482 -0
  19. data/ca_obj_field.c +625 -0
  20. data/ca_obj_grid.c +738 -0
  21. data/ca_obj_mapping.c +614 -0
  22. data/ca_obj_object.c +777 -0
  23. data/ca_obj_reduce.c +299 -0
  24. data/ca_obj_refer.c +627 -0
  25. data/ca_obj_repeat.c +640 -0
  26. data/ca_obj_select.c +558 -0
  27. data/ca_obj_shift.c +952 -0
  28. data/ca_obj_transpose.c +582 -0
  29. data/ca_obj_unbound_repeat.c +557 -0
  30. data/ca_obj_window.c +1023 -0
  31. data/carray.h +1381 -0
  32. data/carray_access.c +1798 -0
  33. data/carray_attribute.c +903 -0
  34. data/carray_call_cfunc.c +1107 -0
  35. data/carray_cast.c +1155 -0
  36. data/carray_cast_func.rb +498 -0
  37. data/carray_class.c +132 -0
  38. data/carray_conversion.c +518 -0
  39. data/carray_copy.c +453 -0
  40. data/carray_core.c +1307 -0
  41. data/carray_element.c +572 -0
  42. data/carray_generate.c +681 -0
  43. data/carray_iterator.c +630 -0
  44. data/carray_loop.c +462 -0
  45. data/carray_mask.c +1174 -0
  46. data/carray_math.rb +834 -0
  47. data/carray_numeric.c +257 -0
  48. data/carray_operator.c +582 -0
  49. data/carray_order.c +1040 -0
  50. data/carray_random.c +529 -0
  51. data/carray_sort_addr.c +261 -0
  52. data/carray_stat.c +2102 -0
  53. data/carray_stat_proc.rb +1990 -0
  54. data/carray_test.c +602 -0
  55. data/carray_undef.c +69 -0
  56. data/carray_utils.c +740 -0
  57. data/ext/calculus/carray_calculus.c +792 -0
  58. data/ext/calculus/carray_interp.c +355 -0
  59. data/ext/calculus/extconf.rb +12 -0
  60. data/ext/calculus/lib/autoload/autoload_math_calculus.rb +2 -0
  61. data/ext/calculus/lib/math/calculus.rb +119 -0
  62. data/ext/calculus/lib/math/interp/adapter_interp1d.rb +31 -0
  63. data/ext/dataframe/API.txt +11 -0
  64. data/ext/dataframe/extconf.rb +3 -0
  65. data/ext/dataframe/lib/carray/autoload/autoload_dataframe_dataframe.rb +14 -0
  66. data/ext/dataframe/lib/carray/dataframe/dataframe.rb +1104 -0
  67. data/ext/dataframe/sample/test_uniq_sort.rb +5 -0
  68. data/ext/fortio/extconf.rb +3 -0
  69. data/ext/fortio/lib/carray/autoload/autoload_fortran_format.rb +5 -0
  70. data/ext/fortio/lib/carray/io/fortran_format.rb +43 -0
  71. data/ext/fortio/lib/fortio.rb +3 -0
  72. data/ext/fortio/lib/fortio/fortran_format.rb +603 -0
  73. data/ext/fortio/lib/fortio/fortran_format.tab.rb +536 -0
  74. data/ext/fortio/lib/fortio/fortran_format.y +215 -0
  75. data/ext/fortio/lib/fortio/fortran_namelist.rb +151 -0
  76. data/ext/fortio/lib/fortio/fortran_namelist.tab.rb +470 -0
  77. data/ext/fortio/lib/fortio/fortran_namelist.y +213 -0
  78. data/ext/fortio/lib/fortio/fortran_sequential.rb +345 -0
  79. data/ext/fortio/ruby_fortio.c +182 -0
  80. data/ext/fortio/test/test_H.rb +5 -0
  81. data/ext/fortio/test/test_T.rb +7 -0
  82. data/ext/fortio/test/test_fortran_format.rb +86 -0
  83. data/ext/fortio/test/test_namelist.rb +25 -0
  84. data/ext/fortio/test/test_sequential.rb +13 -0
  85. data/ext/fortio/test/test_sequential2.rb +13 -0
  86. data/ext/fortio/work/test.rb +10 -0
  87. data/ext/fortio/work/test_e.rb +19 -0
  88. data/ext/fortio/work/test_ep.rb +10 -0
  89. data/ext/fortio/work/test_parse.rb +12 -0
  90. data/ext/imagemap/carray_imagemap.c +495 -0
  91. data/ext/imagemap/doc/call_graph.dot +28 -0
  92. data/ext/imagemap/draw.c +567 -0
  93. data/ext/imagemap/extconf.rb +13 -0
  94. data/ext/imagemap/lib/autoload/autoload_graphics_imagemap.rb +1 -0
  95. data/ext/imagemap/lib/graphics/imagemap.rb +273 -0
  96. data/ext/imagemap/lib/image_map.rb +4 -0
  97. data/ext/imagemap/test/swath_index.rb +83 -0
  98. data/ext/imagemap/test/swath_warp.rb +99 -0
  99. data/ext/imagemap/test/test.rb +23 -0
  100. data/ext/imagemap/test/test_image.rb +42 -0
  101. data/ext/imagemap/test/test_line.rb +14 -0
  102. data/ext/imagemap/test/test_rotate.rb +17 -0
  103. data/ext/imagemap/test/test_triangle.rb +20 -0
  104. data/ext/imagemap/test/test_warp.rb +26 -0
  105. data/ext/mathfunc/carray_mathfunc.c +321 -0
  106. data/ext/mathfunc/extconf.rb +18 -0
  107. data/ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb +1 -0
  108. data/ext/mathfunc/lib/math/mathfunc.rb +15 -0
  109. data/ext/mathfunc/test/test_hypot.rb +5 -0
  110. data/ext/mathfunc/test/test_j0.rb +22 -0
  111. data/ext/mathfunc/test/test_jn.rb +8 -0
  112. data/ext/mathfunc/test/test_sph.rb +9 -0
  113. data/ext/narray/README +22 -0
  114. data/ext/narray/ca_wrap_narray.c +491 -0
  115. data/ext/narray/carray_narray.c +21 -0
  116. data/ext/narray/extconf.rb +57 -0
  117. data/ext/narray/lib/autoload/autoload_math_narray.rb +1 -0
  118. data/ext/narray/lib/autoload/autoload_math_narray_miss.rb +11 -0
  119. data/ext/narray/lib/math/narray.rb +17 -0
  120. data/ext/narray/lib/math/narray_miss.rb +45 -0
  121. data/extconf.rb +3 -25
  122. data/lib/carray.rb +28 -0
  123. data/lib/carray/autoload/autoload_base.rb +23 -0
  124. data/lib/carray/autoload/autoload_graphics_gnuplot.rb +2 -0
  125. data/lib/carray/autoload/autoload_io_csv.rb +14 -0
  126. data/lib/carray/autoload/autoload_io_excel.rb +5 -0
  127. data/lib/carray/autoload/autoload_io_imagemagick.rb +6 -0
  128. data/lib/carray/autoload/autoload_io_pg.rb +6 -0
  129. data/lib/carray/autoload/autoload_io_sqlite3.rb +12 -0
  130. data/lib/carray/autoload/autoload_io_table.rb +1 -0
  131. data/lib/carray/autoload/autoload_math_histogram.rb +5 -0
  132. data/lib/carray/autoload/autoload_math_interp.rb +4 -0
  133. data/lib/carray/autoload/autoload_math_recurrence.rb +6 -0
  134. data/lib/carray/autoload/autoload_object_iterator.rb +1 -0
  135. data/lib/carray/autoload/autoload_object_link.rb +1 -0
  136. data/lib/carray/autoload/autoload_object_pack.rb +2 -0
  137. data/lib/carray/base/autoload.rb +94 -0
  138. data/lib/carray/base/basic.rb +1051 -0
  139. data/lib/carray/base/inspect.rb +252 -0
  140. data/lib/carray/base/iterator.rb +367 -0
  141. data/lib/carray/base/math.rb +403 -0
  142. data/lib/carray/base/obsolete.rb +93 -0
  143. data/lib/carray/base/serialize.rb +260 -0
  144. data/lib/carray/base/struct.rb +634 -0
  145. data/lib/carray/graphics/gnuplot.rb +2116 -0
  146. data/lib/carray/info.rb +112 -0
  147. data/lib/carray/io/csv.rb +560 -0
  148. data/lib/carray/io/excel.rb +26 -0
  149. data/lib/carray/io/imagemagick.rb +231 -0
  150. data/lib/carray/io/pg.rb +101 -0
  151. data/lib/carray/io/sqlite3.rb +202 -0
  152. data/lib/carray/io/table.rb +77 -0
  153. data/lib/carray/math/histogram.rb +179 -0
  154. data/lib/carray/math/interp.rb +57 -0
  155. data/lib/carray/math/interp/adapter_gsl_spline.rb +47 -0
  156. data/lib/carray/math/recurrence.rb +95 -0
  157. data/lib/carray/mkmf.rb +145 -0
  158. data/lib/carray/object/ca_obj_iterator.rb +52 -0
  159. data/lib/carray/object/ca_obj_link.rb +52 -0
  160. data/lib/carray/object/ca_obj_pack.rb +101 -0
  161. data/mkmath.rb +731 -0
  162. data/mt19937ar.c +182 -0
  163. data/mt19937ar.h +86 -0
  164. data/rdoc_main.rb +27 -0
  165. data/rdoc_math.rb +5 -0
  166. data/rdoc_stat.rb +31 -0
  167. data/ruby_carray.c +242 -0
  168. data/ruby_ccomplex.c +497 -0
  169. data/ruby_float_func.c +83 -0
  170. data/spec/CABlockIterator/CABlockIterator_spec.rb +113 -0
  171. data/spec/CArray/bug/store_spec.rb +27 -0
  172. data/spec/CArray/index/repeat_spec.rb +10 -0
  173. data/spec/CArray/method/eq_spec.rb +80 -0
  174. data/spec/CArray/method/is_nan_spec.rb +12 -0
  175. data/spec/CArray/method/ne_spec.rb +18 -0
  176. data/spec/CArray/method/round_spec.rb +11 -0
  177. data/spec/CArray/object/_attribute_spec.rb +32 -0
  178. data/spec/CArray/object/s_new_spec.rb +31 -0
  179. data/spec/CArray/serialize/Serialization_spec.rb +89 -0
  180. data/spec/spec_all.rb +11 -0
  181. data/test/test_ALL.rb +50 -0
  182. data/test/test_CABitfield.rb +59 -0
  183. data/test/test_CABlock.rb +208 -0
  184. data/test/test_CAField.rb +40 -0
  185. data/test/test_CAGrid.rb +76 -0
  186. data/test/test_CAMapping.rb +106 -0
  187. data/test/test_CAMmap.rb +11 -0
  188. data/test/test_CARefer.rb +94 -0
  189. data/test/test_CARepeat.rb +66 -0
  190. data/test/test_CASelect.rb +23 -0
  191. data/test/test_CAShift.rb +17 -0
  192. data/test/test_CATranspose.rb +61 -0
  193. data/test/test_CAVirtual.rb +214 -0
  194. data/test/test_CAWindow.rb +55 -0
  195. data/test/test_CAWrap.rb +9 -0
  196. data/test/test_CArray.rb +228 -0
  197. data/test/test_CComplex.rb +83 -0
  198. data/test/test_CScalar.rb +91 -0
  199. data/test/test_attribute.rb +281 -0
  200. data/test/test_block_iterator.rb +17 -0
  201. data/test/test_boolean.rb +99 -0
  202. data/test/test_cast.rb +33 -0
  203. data/test/test_class.rb +85 -0
  204. data/test/test_complex.rb +43 -0
  205. data/test/test_composite.rb +125 -0
  206. data/test/test_convert.rb +79 -0
  207. data/test/test_copy.rb +141 -0
  208. data/test/test_creation.rb +85 -0
  209. data/test/test_element.rb +146 -0
  210. data/test/test_extream.rb +55 -0
  211. data/test/test_generate.rb +75 -0
  212. data/test/test_index.rb +71 -0
  213. data/test/test_mask.rb +578 -0
  214. data/test/test_math.rb +98 -0
  215. data/test/test_narray.rb +64 -0
  216. data/test/test_order.rb +147 -0
  217. data/test/test_random.rb +15 -0
  218. data/test/test_ref_store.rb +211 -0
  219. data/test/test_stat.rb +414 -0
  220. data/test/test_struct.rb +72 -0
  221. data/test/test_virtual.rb +49 -0
  222. data/utils/ca_ase.rb +21 -0
  223. data/utils/ca_methods.rb +15 -0
  224. data/utils/cast_checker.rb +30 -0
  225. data/utils/create_rdoc.sh +9 -0
  226. data/utils/diff_method.rb +52 -0
  227. data/utils/extract_rdoc.rb +27 -0
  228. data/utils/make_tgz.sh +3 -0
  229. data/utils/remove_resource_fork.sh +5 -0
  230. data/version.h +3 -3
  231. metadata +266 -1
@@ -0,0 +1,403 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/base/math.rb
4
+ #
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
+ #
9
+ # Copyright (C) 2005 Hiroki Motoyoshi
10
+ #
11
+ # ----------------------------------------------------------------------------
12
+
13
+ class CArray
14
+
15
+ # complex number
16
+
17
+ # Return the real part of +self+.
18
+ # If +self+ is a complex array, the resulted array is CAMember object
19
+ # refers the appropriate part of +self+.
20
+ # Otherwise, the resulted array is CARefer object refers +self+.
21
+ # If you change the resulted array, the original array is also changed.
22
+ #
23
+ def real
24
+ if not @__real__
25
+ if complex?
26
+ @__real__ = case data_type
27
+ when CA_CMPLX64
28
+ field(0, CA_FLOAT32)
29
+ when CA_CMPLX128
30
+ field(0, CA_FLOAT64)
31
+ when CA_CMPLX128
32
+ field(0, CA_FLOAT128)
33
+ end
34
+ else
35
+ @__real__ = self[]
36
+ end
37
+ end
38
+ @__real__
39
+ end
40
+
41
+ def real= (val)
42
+ real[] = val
43
+ end
44
+
45
+ # Return the imaginary part of +self+.
46
+ # If +self+ is a complex array, the resulted array is CAMember object
47
+ # refers the appropriate part of +self+. In this case,
48
+ # you change the resulted array, the original array is also changed.
49
+ #
50
+ # Otherwise, the resulted array is a dummy CArray object filled with 0.
51
+ # In this case, the change in the resulted array does not affect
52
+ # the original array. For this purpose, you should explicitly convert
53
+ # the array to complex array.
54
+ #
55
+ def imag
56
+ if not @__imag__
57
+ if complex?
58
+ @__imag__ = case data_type
59
+ when CA_CMPLX64
60
+ field(4, CA_FLOAT32)
61
+ when CA_CMPLX128
62
+ field(8, CA_FLOAT64)
63
+ when CA_CMPLX128
64
+ field(16, CA_FLOAT128)
65
+ end
66
+ else
67
+ @__imag__ = self.template { 0 }
68
+ end
69
+ end
70
+ return @__imag__
71
+ end
72
+
73
+ def imag= (val)
74
+ if complex?
75
+ imag[] = val
76
+ else
77
+ raise "not a complex array"
78
+ end
79
+ end
80
+
81
+ # comparison operators
82
+
83
+ def <=> (other)
84
+ lower = self < other
85
+ upper = self > other
86
+ out = CArray.new(CA_INT8, lower.dim)
87
+ out[lower] = -1
88
+ out[upper] = 1
89
+ return out
90
+ end
91
+
92
+ alias cmp <=>
93
+
94
+ def is_equiv (other, rtol)
95
+ exact_eq = self.eq(other)
96
+ relative_eq = ((self - other).abs/CAMath.max(self.abs, other.abs) <= rtol)
97
+ return (exact_eq).or(relative_eq)
98
+ end
99
+
100
+ def is_close (other, atol)
101
+ return ((self - other).abs <= atol)
102
+ end
103
+
104
+ def is_divisible (n)
105
+ unless integer?
106
+ raise "data type of reciever of CArray#divisible? should be integer."
107
+ end
108
+ return (self % n).eq(0)
109
+ end
110
+
111
+ def is_not_divisible (n)
112
+ unless integer?
113
+ raise "data type of reciever of CArray#divisible? should be integer."
114
+ end
115
+ return (self % n).ne(0)
116
+ end
117
+
118
+ def real?
119
+ if complex?
120
+ imag.all_equal?(0)
121
+ elsif numeric?
122
+ true
123
+ else
124
+ nil
125
+ end
126
+ end
127
+
128
+ def is_real
129
+ if complex?
130
+ imag.eq(0)
131
+ elsif numeric?
132
+ self.true
133
+ else
134
+ nil
135
+ end
136
+ end
137
+
138
+ def sign
139
+ out = self.zero
140
+ out[self.lt(0)] = -1
141
+ out[self.gt(0)] = 1
142
+ if float?
143
+ out[self.is_nan] = 0.0/0.0
144
+ end
145
+ return out
146
+ end
147
+
148
+ def quo (other)
149
+ case
150
+ when integer?
151
+ return double/other
152
+ when object?
153
+ return quo_i(other)
154
+ else
155
+ return self/other
156
+ end
157
+ end
158
+
159
+ end
160
+
161
+
162
+ module CAMath
163
+
164
+ module_function
165
+
166
+ def min (*argv)
167
+ if ary = argv.find{|x| x.is_a?(CArray) }
168
+ out = ary.to_ca
169
+ argv.delete(ary)
170
+ argv.each do |x|
171
+ out.pmin!(x)
172
+ end
173
+ else
174
+ raise "args should contain more than one CArray object"
175
+ end
176
+ return out
177
+ end
178
+
179
+ def max (*argv)
180
+ if ary = argv.find{|x| x.is_a?(CArray) }
181
+ out = ary.to_ca
182
+ argv.delete(ary)
183
+ argv.each do |x|
184
+ out.pmax!(x)
185
+ end
186
+ else
187
+ raise "args should contain more than one CArray object"
188
+ end
189
+ return out
190
+ end
191
+
192
+ end
193
+
194
+ class CArray
195
+
196
+ #
197
+ # statistics
198
+ #
199
+
200
+ def random (*argv)
201
+ return template.random!(*argv)
202
+ end
203
+
204
+ def randomn!
205
+ if elements == 1
206
+ self[0] = CArray.new(data_type,[2]).randomn![0]
207
+ return self
208
+ end
209
+ x1 = CArray.new(data_type, [elements/2])
210
+ x2 = CArray.new(data_type, [elements/2])
211
+ fac = x1.random!.log!.mul!(-2.0).sqrt! ### fac = sqrt(-2*log(rnd()))
212
+ x2.random!.mul!(2.0*Math::PI) ### x2 = 2*PI*rnd()
213
+ x3 = x2.to_ca
214
+ self2 = reshape(2,elements/2)
215
+ self2[0,nil] = x2.cos!.mul!(fac) ### self[even] = fac*cos(x2)
216
+ self2[1,nil] = x3.sin!.mul!(fac) ### self[odd] = fac*sin(x2)
217
+ if elements % 2 == 1
218
+ self[[-1]].randomn!
219
+ end
220
+ return self
221
+ end
222
+
223
+ def randomn
224
+ return template.randomn!
225
+ end
226
+
227
+ def anomaly (*argv)
228
+ opt = argv.last.is_a?(Hash) ? argv.pop : {}
229
+ idxs = Array.new(self.rank) { |i| argv.include?(i) ? :* : nil }
230
+ if mn = opt[:mean]
231
+ return self - mn[*idxs]
232
+ else
233
+ return self - self.mean(*argv)[*idxs]
234
+ end
235
+ end
236
+
237
+ alias anom anomaly
238
+
239
+ def median (*argv)
240
+ opt = argv.last.is_a?(Hash) ? argv.pop : {}
241
+ min_count = opt[:mask_limit]
242
+ if min_count and min_count < 0
243
+ min_count += elements
244
+ end
245
+ fill_value = opt[:fill_value]
246
+ if argv.empty?
247
+ if has_mask?
248
+ if min_count and count_masked() > min_count
249
+ return fill_value || UNDEF
250
+ end
251
+ c = self[:is_not_masked].sort
252
+ n = self.count_not_masked
253
+ else
254
+ c = self.sort
255
+ n = c.elements
256
+ end
257
+ if n == 0
258
+ return fill_value || UNDEF
259
+ else
260
+ return (c[(n-1)/2] + c[n/2])/2.0
261
+ end
262
+ else
263
+ raise "CArray#median is not implemented for multiple ranks"
264
+ end
265
+
266
+ end
267
+
268
+ def percentile (*argv)
269
+ opt = argv.last.is_a?(Hash) ? argv.pop : {}
270
+ pers = argv
271
+ min_count = opt[:mask_limit]
272
+ if min_count and min_count < 0
273
+ min_count += elements
274
+ end
275
+ fill_value = opt[:fill_value]
276
+ if has_mask?
277
+ if min_count and count_masked() > min_count
278
+ return argv.map { fill_value || UNDEF }
279
+ end
280
+ ca = self[:is_not_masked].sort
281
+ n = self.count_not_masked
282
+ else
283
+ ca = self.sort
284
+ n = ca.elements
285
+ end
286
+ out = []
287
+ begin
288
+ pers.each do |per|
289
+ if per == 100
290
+ out << ca[n-1]
291
+ elsif per >= 0 and per < 100
292
+ if n > 1
293
+ f = (n-1)*per/100.0
294
+ k = f.floor
295
+ r = f - k
296
+ out << (1-r)*ca[k] + r*ca[k+1]
297
+ else
298
+ out << ca[0]
299
+ end
300
+ else
301
+ out << CA_NAN
302
+ end
303
+ end
304
+ rescue
305
+ p self[:is_not_masked]
306
+ p n
307
+ raise
308
+ end
309
+ return out
310
+ end
311
+
312
+ def quantile
313
+ return percentile(0, 25, 50, 75, 100)
314
+ end
315
+
316
+ def covariancep (y, min_count = nil, fill_value = nil)
317
+ x = self.double
318
+ y = y.double
319
+ if x.has_mask? or y.has_mask?
320
+ x.inherit_mask(y)
321
+ y.inherit_mask(x)
322
+ count = x.count_not_masked
323
+ xm = x.mean(:min_count => min_count)
324
+ ym = y.mean(:min_count => min_count)
325
+ if ( xm.undef? or ym.undef? )
326
+ return fill_value || UNDEF
327
+ else
328
+ return (x-xm).wsum(y-ym)/count
329
+ end
330
+ else
331
+ return (x-x.mean).wsum(y-y.mean)/elements
332
+ end
333
+ end
334
+
335
+ def covariance (y, min_count = nil, fill_value = nil)
336
+ x = self.double
337
+ y = y.double
338
+ if x.has_mask? or y.has_mask?
339
+ x.inherit_mask(y)
340
+ y.inherit_mask(x)
341
+ count = x.count_not_masked
342
+ xm = x.mean(:min_count=>min_count)
343
+ ym = y.mean(:min_count=>min_count)
344
+ if ( xm.undef? or ym.undef? )
345
+ return fill_value || UNDEF
346
+ else
347
+ return (x-xm).wsum(y-ym)/(count-1)
348
+ end
349
+ else
350
+ return (x-x.mean).wsum(y-y.mean)/(elements-1)
351
+ end
352
+ end
353
+
354
+ def correlation (y, min_count = nil, fill_value = nil)
355
+ x = self.double
356
+ y = y.double
357
+ if x.has_mask? or y.has_mask?
358
+ x.inherit_mask(y)
359
+ y.inherit_mask(x)
360
+ xm = x.mean(:min_count=>min_count)
361
+ ym = y.mean(:min_count=>min_count)
362
+ if ( xm.undef? or ym.undef? )
363
+ return fill_value || UNDEF
364
+ else
365
+ xd, yd = x-xm, y-ym
366
+ return xd.wsum(yd)/(xd.wsum(xd)*yd.wsum(yd)).sqrt
367
+ end
368
+ else
369
+ xd, yd = x-x.mean, y-y.mean
370
+ return xd.wsum(yd)/(xd.wsum(xd)*yd.wsum(yd)).sqrt
371
+ end
372
+ end
373
+
374
+ end
375
+
376
+ class CArray
377
+
378
+ def self.summation (*dim)
379
+ out = nil
380
+ first = true
381
+ CArray.each_index(*dim) { |*idx|
382
+ if first
383
+ out = yield(*idx)
384
+ first = false
385
+ else
386
+ out += yield(*idx)
387
+ end
388
+ }
389
+ return out
390
+ end
391
+
392
+ def by (other)
393
+ case other
394
+ when CArray
395
+ return (self[nil][nil,:*]*other[nil][:*,nil]).reshape(*(dim+other.dim))
396
+ else
397
+ return self * other
398
+ end
399
+ end
400
+
401
+ end
402
+
403
+
@@ -0,0 +1,93 @@
1
+
2
+ class CArray
3
+
4
+ def fa # :nodoc:
5
+ warn "CArray#fa will be obsolete, use CArray#t"
6
+ return self.t
7
+ end
8
+
9
+ def block_iterator (*argv) # :nodoc:
10
+ warn "CArray#block_iterator will be obsolete, use CArray#blocks"
11
+ return blocks(*argv)
12
+ end
13
+
14
+ def window_iterator (*argv) # :nodoc:
15
+ warn "CArray#window_iterator will be obsolete, use CArray#windows"
16
+ return windows(*argv)
17
+ end
18
+
19
+ def rotated (*argv) # :nodoc:
20
+ warn "CArray#rotated will be obsolete, use CArray#rolled"
21
+ argv.push({:roll => Array.new(rank){1} })
22
+ return shifted(*argv)
23
+ end
24
+
25
+ def rotate! (*argv) # :nodoc:
26
+ warn "CArray#rotate! will be obsolete, use CArray#roll!"
27
+ self[] = self.rolled(*argv)
28
+ return self
29
+ end
30
+
31
+ def rotate (*argv) # :nodoc:
32
+ warn "CArray#rotate will be obsolete, use CArray#roll"
33
+ return self.rolled(*argv).to_ca
34
+ end
35
+
36
+ def select (&block) # :nodoc:
37
+ warn "CArray#select will be obsolete"
38
+ case block.arity
39
+ when 1
40
+ return self[*yield(self)]
41
+ when -1, 0
42
+ return self[*instance_exec(&block)]
43
+ else
44
+ raise
45
+ end
46
+ end
47
+
48
+ def transform (type, dim, opt = {}) # :nodoc:
49
+ warn("CArray#transform will be obsolete")
50
+ return refer(type, dim, opt).to_ca
51
+ end
52
+
53
+ def classify (klass, outlier = nil) # :nodoc:
54
+ warn "CArray#classify will be obsolete"
55
+ b = CArray.int32(*dim)
56
+ f = CArray.boolean(*dim) { 1 }
57
+ attach {
58
+ (klass.elements-1).times do |i|
59
+ r = f.and(self < klass[i+1])
60
+ b[r] = i
61
+ f[r] = 0
62
+ end
63
+ if outlier
64
+ b[self < klass[0]] = outlier
65
+ b[f] = outlier
66
+ else
67
+ b[self < klass[0]] = -1
68
+ b[f] = klass.elements-1
69
+ end
70
+ }
71
+ return b
72
+ end
73
+
74
+ =begin
75
+ def histogram (klass)
76
+ c = CArray.int32(klass.elements-1)
77
+ f = CArray.boolean(*dim) { 1 }
78
+ attach {
79
+ k = 0
80
+ r = f.and(self < klass[0])
81
+ f[r] = 0
82
+ (klass.elements-1).times do |i|
83
+ r = f.and(self < klass[i+1])
84
+ c[k] = r.count_true
85
+ f[r] = 0
86
+ k+=1
87
+ end
88
+ }
89
+ return c
90
+ end
91
+ =end
92
+
93
+ end