narray 0.5.9.4

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 (81) hide show
  1. data/src/ChangeLog +614 -0
  2. data/src/MANIFEST +82 -0
  3. data/src/README.en +54 -0
  4. data/src/README.ja +63 -0
  5. data/src/SPEC.en +300 -0
  6. data/src/SPEC.ja +284 -0
  7. data/src/depend +14 -0
  8. data/src/extconf.rb +111 -0
  9. data/src/lib/narray_ext.rb +211 -0
  10. data/src/lib/nmatrix.rb +244 -0
  11. data/src/mkmath.rb +780 -0
  12. data/src/mknafunc.rb +190 -0
  13. data/src/mkop.rb +638 -0
  14. data/src/na_array.c +644 -0
  15. data/src/na_func.c +1624 -0
  16. data/src/na_index.c +988 -0
  17. data/src/na_linalg.c +616 -0
  18. data/src/na_random.c +409 -0
  19. data/src/narray.c +1308 -0
  20. data/src/narray.def +29 -0
  21. data/src/narray.h +170 -0
  22. data/src/narray_local.h +210 -0
  23. data/src/nimage/README.en +38 -0
  24. data/src/nimage/demo/fits.rb +97 -0
  25. data/src/nimage/demo/fits_convol.rb +28 -0
  26. data/src/nimage/demo/fits_fftdemo.rb +27 -0
  27. data/src/nimage/demo/fitsdemo1.rb +13 -0
  28. data/src/nimage/demo/fitsdemo2.rb +30 -0
  29. data/src/nimage/demo/fitsdemo3.rb +26 -0
  30. data/src/nimage/demo/fitsmorph.rb +39 -0
  31. data/src/nimage/demo/life_na.rb +57 -0
  32. data/src/nimage/demo/mandel.rb +41 -0
  33. data/src/nimage/extconf.rb +12 -0
  34. data/src/nimage/lib/nimage.rb +51 -0
  35. data/src/nimage/nimage.c +328 -0
  36. data/src/speed/add.py +12 -0
  37. data/src/speed/add.rb +8 -0
  38. data/src/speed/add_int.py +12 -0
  39. data/src/speed/add_int.rb +9 -0
  40. data/src/speed/lu.m +14 -0
  41. data/src/speed/lu.rb +22 -0
  42. data/src/speed/mat.m +23 -0
  43. data/src/speed/mat.rb +28 -0
  44. data/src/speed/mul.py +12 -0
  45. data/src/speed/mul.rb +9 -0
  46. data/src/speed/mul2.py +15 -0
  47. data/src/speed/mul2.rb +13 -0
  48. data/src/speed/mul_comp.py +12 -0
  49. data/src/speed/mul_comp.rb +9 -0
  50. data/src/speed/mul_int.py +12 -0
  51. data/src/speed/mul_int.rb +9 -0
  52. data/src/speed/mybench.py +15 -0
  53. data/src/speed/mybench.rb +31 -0
  54. data/src/speed/solve.m +18 -0
  55. data/src/speed/solve.py +16 -0
  56. data/src/speed/solve.rb +21 -0
  57. data/src/test/statistics.rb +22 -0
  58. data/src/test/testarray.rb +20 -0
  59. data/src/test/testbit.rb +27 -0
  60. data/src/test/testcast.rb +14 -0
  61. data/src/test/testcomplex.rb +35 -0
  62. data/src/test/testfftw.rb +16 -0
  63. data/src/test/testindex.rb +11 -0
  64. data/src/test/testindexary.rb +26 -0
  65. data/src/test/testindexset.rb +55 -0
  66. data/src/test/testmask.rb +40 -0
  67. data/src/test/testmath.rb +48 -0
  68. data/src/test/testmath2.rb +46 -0
  69. data/src/test/testmatrix.rb +13 -0
  70. data/src/test/testmatrix2.rb +33 -0
  71. data/src/test/testmatrix3.rb +19 -0
  72. data/src/test/testminmax.rb +46 -0
  73. data/src/test/testobject.rb +29 -0
  74. data/src/test/testpow.rb +19 -0
  75. data/src/test/testrandom.rb +23 -0
  76. data/src/test/testround.rb +11 -0
  77. data/src/test/testsort.rb +37 -0
  78. data/src/test/teststr.rb +13 -0
  79. data/src/test/testtrans.rb +18 -0
  80. data/src/test/testwhere.rb +27 -0
  81. metadata +127 -0
data/src/README.en ADDED
@@ -0,0 +1,54 @@
1
+ Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA
2
+
3
+ * NArray properties:
4
+
5
+ + Fast and easy calculation for large numerical array.
6
+ + Accepting Elements:
7
+ 8,16,32 bit integer, single/double float/complex, Ruby Object.
8
+ + Easy extraction/substitution of array subset,
9
+ using assignment with number, range, array index.
10
+ + Operator: +,-,*,/,%,**, etc.
11
+ + FFTW version 2 or 3 is separately supported.
12
+ http://www.ir.isas.ac.jp/~masa/ruby/dist/ruby-fftw3-0.1.0.tar.gz
13
+ + NImage: Image viewer class.
14
+ + Ruby/PGPLOT: Graphics library interface (separately distributed)
15
+ X-Y Graph, Histogram, Contour map, Image map, etc.
16
+
17
+ * NArray is similar to:
18
+
19
+ + Python/NumPy, Perl/PDL, Yorick, IDL
20
+
21
+ * NArray is far from completed!
22
+
23
+ + Experimental! Specification may be changed.
24
+ + Far from completed.
25
+ + Bugs may be included.
26
+ + No document.
27
+
28
+ * Installation
29
+
30
+ + If you want to use FFTW, install it.
31
+ http://www.fftw.org/ or http://www.netlib.org/
32
+
33
+ + Compile & Install NArray
34
+
35
+ ruby extconf.rb
36
+ make
37
+ make site-install
38
+ (or, make install)
39
+
40
+ * Tested Platform
41
+
42
+ ruby 1.8.4 (2005-12-24) [i686-linux]
43
+ gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
44
+
45
+ * License
46
+
47
+ This program is free software.
48
+ You can distribute/modify this program
49
+ under the same terms as Ruby itself.
50
+ NO WARRANTY.
51
+
52
+ * Author
53
+
54
+ Masahiro TANAKA <masa@ir.isas.ac.jp>
data/src/README.ja ADDED
@@ -0,0 +1,63 @@
1
+ Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA
2
+
3
+ * Ruby/NArray$B$NFCD'!#(B
4
+
5
+ + Ruby$B$G!"9bB.$J?tCM7W;;$,2DG=!#(B
6
+ + $BMWAG$K$O!"(B8,16,32 bit $B@0?t!"C1@:EY(B/$BG\@:EY$N<B?t(B/$BJ#AG?t!"(B
7
+ $B$*$h$S(B Ruby$B%*%V%8%'%/%H$r%5%]!<%H!#(B
8
+ + $BItJ,G[Ns$N<h=P$7!"BeF~$bMF0W!#(B
9
+ $BMWAG0LCV$N;XDj$K$O!"?tCM!"HO0O!"%$%s%G%C%/%9$NG[Ns$,;HMQ2DG=!#(B
10
+ + +,-,*,/,%,** $B$d(B $B;;=Q4X?t$N1i;;$O!"MWAG(B-$BBP(B-$BMWAG$G$*$3$J$&!#(B
11
+ + $BG[NsF1;N$N1i;;!&BeF~$O!"3F<!85$N%5%$%:$,F1$8$G$"$k$3$H$,I,MW!#(B
12
+ $B$?$@$7!"%5%$%:$,(B1$B$N<!85$O!"B>J}$NG[Ns$N%5%$%:$K9g$o$;$F(B
13
+ $B!V7+$jJV$7!WF1$8MWAG$,E,MQ$5$l$k!#(B
14
+ + FFTW ($B9bB.%U!<%j%(JQ49(B) version 3 $B$O<!$N%b%8%e!<%k$G%5%]!<%H!#(B
15
+ http://www.ir.isas.ac.jp/~masa/ruby/dist/ruby-fftw3-0.1.0.tar.gz
16
+ + NImage (X11$B%$%a!<%8I=<((B) $B%/%i%9ImB0!#(B(nimage/ $B%G%#%l%/%H%j;2>H(B)
17
+ + Ruby/PGPLOT ($B%0%i%U%#%C%/%9%i%$%V%i%j!"JLW}(B) $B$K$F(B
18
+ XY$B%0%i%U!"%R%9%H%0%i%`!"Ey9b@~!"%$%a!<%8I=<(2DG=!#(B
19
+ + $B?tCM7W;;!&2hA|=hM}!&%G!<%?2r@O$J$II}9-$$1~MQ$,2DG=(B($B$H;W$&(B)$B!#(B
20
+
21
+ * $BN`;wIJ(B
22
+
23
+ + Python/NumPy, Perl/PDL, Yorick, IDL
24
+
25
+ * $BIT==J,$JE@(B
26
+
27
+ + $B%a%=%C%I$,ITB-!#(B
28
+ + $B%P%0=P$7$,IT==J,!#(B
29
+ + $B%I%-%e%a%s%H$,$J$$!#(B
30
+
31
+ * $B%$%s%9%H!<%kJ}K!(B
32
+
33
+ Ruby$B$NI8=`E*$J3HD%%i%$%V%i%j$HF1$8$G$9!#%=!<%9$rE83+$7$?%G%#%l%/%H%j$G!"(B
34
+
35
+ ruby extconf.rb
36
+ make
37
+ make site-install
38
+ ($B$^$?$O(B make install)
39
+
40
+ $B$H<B9T$7$^$9!#(B
41
+
42
+ * $BF0:n3NG'(B
43
+
44
+ ruby 1.8.4 (2005-12-24) [i686-linux]
45
+ gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
46
+
47
+ * $BG[I[>r7o(B
48
+
49
+ Ruby$B$N%i%$%;%s%9$K=`5r$7$^$9!#(B
50
+
51
+ * $BCx<T(B
52
+
53
+ $BEDCf>;9((B
54
+ $B$40U8+!$%P%0%l%]!<%H$=$NB>$O(B masa@ir.isas.ac.jp $B$^$G$*4j$$$7$^$9!#(B
55
+
56
+ * $B<U<-(B
57
+
58
+ $B$^$D$b$H$f$-$R$m(B $B$5$s(B $B$r$O$8$a$H$9$k(BRuby$B3+H/<T$N$_$J$5$^(B for Ruby
59
+
60
+ $B0KF#(B $B>4B'(B $B$5$s(B for MDArray
61
+ $B3HD%%i%$%V%i%j$N:n$jJ}$d!"(BArray$B$+$iB?<!85G[Ns$KJQ49$9$kItJ,$r(B
62
+ $B;29M$K$5$;$F$$$?$@$-$^$7$?!#(B
63
+
data/src/SPEC.en ADDED
@@ -0,0 +1,300 @@
1
+
2
+ Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA
3
+
4
+
5
+ Class method:
6
+ NArray.new(typecode, size, ...) create new NArray. initialize with 0.
7
+
8
+ NArray.byte(size,...) 1 byte unsigned integer
9
+ NArray.sint(size,...) 2 byte signed integer
10
+ NArray.int(size,...) 4 byte signed integer
11
+ NArray.sfloat(size,...) single precision float
12
+ NArray.float(size,...) double precision float
13
+ NArray.scomplex(size,...) single precision complex
14
+ NArray.complex(size,...) double precision complex
15
+ NArray.object(size,...) Ruby object
16
+ all above method initialize with 0 or nil.
17
+
18
+ NArray.to_na(array) convert to NArray
19
+ NArray.to_na(string,type[,size,...])
20
+ NArray[...]
21
+ NArray[1,5,10.0] #=> NArray.float(3):[1.0, 5.0, 10.0]
22
+ NArray[1..10] #=> NArray.int(10):[1,2,3,4,5,6,7,8,9,10]
23
+
24
+
25
+ Class constant:
26
+ CLASS_DIMENSION # of dimension treated as data.
27
+ 0 for NArray, 1 for NVector, 2 for NMatrix.
28
+
29
+ NArray information
30
+ self.dim Return the dimension = the number of indices
31
+ self.rank same as dim
32
+ self.shape Return the array of sizes of each index
33
+ self.total Return the number of total elements
34
+
35
+ Slicing Array
36
+ - Index components: Integer, Range, Array, true.
37
+ - Index order: FORTRAN type.
38
+ a[ 1, 2, -1 ] element slicing.
39
+ If negative, counts backward from the end.
40
+ Element-dimensions are contracted.
41
+ a[ 0..3, 4..1 ] extract in the range.
42
+ If the former of the range is bigger,
43
+ return elements in reversed order.
44
+ a[ [1,3,2,4] ] an array with the elements of the indices.
45
+ If `a' has multi-dimension but, in [],
46
+ single index is specified,
47
+ `a' is treated as a single dimension array.
48
+ a[ 1, 2..3, [1,3,2,4], true ] compound index.
49
+ This returns 3-dim array.
50
+ a[] same as a.dup.
51
+ a[ 0, true ] sams as a[0,0..-1]. `true' means all.
52
+ a[ false, 0 ] same as a[true,true,0], if a is a 3-d array,
53
+ `false' means ellipsis dimension.
54
+ a[ mask ] masking. "mask" is a byte NArray with its
55
+ length equal to that of "a". According to the
56
+ value of each element of mask, the corresponding
57
+ element in "a" is eliminated (when 0) or
58
+ retained (when not 0).
59
+ Example:
60
+ a=NArray.float(2,2).indgen!
61
+ p a[ a.lt 3 ]
62
+ --> [ 0.0, 1.0, 2.0 ]
63
+ (Here, a.lt 3 gives a byte NArray)
64
+ (This is also done by a[ (a.lt 3).where ])
65
+
66
+ - A 2-or-more-dim array object with only one argument in `[ ]',
67
+ is treated as a flat 1-d array.
68
+ e.g.: a[3] is same as a[0,1] if a is 3x3 array.
69
+
70
+ - self.slice(...) Same as self[...] but keeps the rank of
71
+ original array by not elimiting dimensions
72
+ whose length became equal to 1 (which self[]
73
+ does). This is not the case with the
74
+ 1-dimensional indexing and masking (same as []).
75
+
76
+ Replacing Elements -- Same rule as slicing
77
+
78
+ a[ 1, 2, 3 ] = 1
79
+ a[ 0..3, 1..4, 2..5 ] = 2
80
+ a[ [1,3,2,4], true ] = 3
81
+ a[] = 4 Same as a.fill!(4)
82
+
83
+ a[0..2] = b[1..5] --> Error! due to different num of elements.
84
+ a[1,2] = b[0..2,1..3] Storing elements from index [1,2]
85
+ ( a[1,2]=b[0,1],a[2,2]=b[1,1],... )
86
+ a[0..2,0..3] = b[0..2,1] Storing repetitively
87
+ ( a[0,0]=b[0,1],..,a[0,3]=b[0,1] )
88
+
89
+ Filling values
90
+ self.indgen!([start[,step]]) Generate index;
91
+ Set values from 'start' with 'step' increment
92
+ self.fill!(value) Fill elements with 'value'
93
+ self.random!(max) Set random values between 0<=x<max
94
+ using MT19337
95
+ self.randomn Set Normally distributed random values
96
+ with mean=0, dispersion=1 (Box-Muller)
97
+ NArray.srand([seed]) Set random seed.
98
+ A time-depend seed is choosed if omitted.
99
+
100
+ Operation: performed element by element
101
+ a = NArray.float(3,3).indgen
102
+ b = NArray.float(3,3).fill(10)
103
+ c = a*b # --> NArray.float(3,3)
104
+
105
+ a = NArray.float(3,1).indgen
106
+ b = NArray.float(1,3).fill(10)
107
+ c = a*b # --> NArray.float(3,3) -- size=1 dimension is extensible.
108
+
109
+ Arithmetic operator
110
+ -self
111
+ self + other
112
+ self - other
113
+ self * other
114
+ self / other
115
+ self % other
116
+ self ** other
117
+ self.abs
118
+
119
+ self.add! other
120
+ self.sbt! other
121
+ self.mul! other
122
+ self.div! other
123
+ self.mod! other
124
+
125
+ Bitwise operator (only for integers)
126
+ ~self
127
+ self & other
128
+ self | other
129
+ self ^ other
130
+
131
+ Comparison
132
+ -- element-wise comparison, results in BYTE-type NArray;
133
+ Note that not true nor false is returned.
134
+ self.eq other ( == operator was obsolete after ver 0.5.4 )
135
+ self.ne other
136
+ self.gt other
137
+ self > other
138
+ self.ge other
139
+ self >= other
140
+ self.lt other
141
+ self < other
142
+ self.le other
143
+ self <= other
144
+
145
+ self.and other element-wise condition.
146
+ self.or other
147
+ self.xor other
148
+ self.not other
149
+
150
+ self.all? true if all the elements are true.
151
+ self.any? true if any element is true.
152
+ self.none? true if none of the element is true.
153
+ self.where Return NArray of indices where elements are true.
154
+ self.where2 Return Array including two NArrays of indices,
155
+ where elements are true and false, respectively.
156
+
157
+ e.g.: idx_t,idx_f = (a>12).where2
158
+
159
+ Statistics
160
+ self.sum(dim,..) Summation of elements in specified dimensions.
161
+ self.mean(dim,..) Mean of elements in specified dimensions.
162
+ self.stddev(dim,..) Standard deviation of elements in the dimensions.
163
+ self.min(dim,..) Minimum in the specified dimensions.
164
+ self.max(dim,..) Maximum in the specified dimensions.
165
+ (All dimensions if omitted, Range can be used)
166
+ self.median(dim) Median in 0..dim (All dimensions if omitted)
167
+
168
+ Sort
169
+ self.sort(dim) Sort in the 0..dim (All dimensions if omitted)
170
+ self.sort_index(dim) Return index of Sort result.
171
+ self[self.sort_index] equals to self.sort.
172
+
173
+ Transpose
174
+ self.transpose( dim0, dim1, .. )
175
+ Transpose array.
176
+ The dim0-th dimension goes to the 0-th dimension of new array.
177
+ Negative number counts backward.
178
+ transpose(-1,1..-2,0) is replacement between the first and the last.
179
+
180
+ Changing Shapes of indices
181
+ self.reshape!(size,...)
182
+ self.shape=(size,...)
183
+ self.newdim=(dim) Insert new dimension with size=1
184
+
185
+ Reference to another NArray
186
+ self.refer create NArray obj referring to another NArray
187
+ self.reshape(size,...) same as self.refer.reshape!
188
+ self.newdim(dim,...) same as self.refer.newdim!
189
+
190
+ Type conversion
191
+ self.floor Return integer NArray whose elements processed 'floor'
192
+ self.ceil
193
+ self.round
194
+ self.to_f Convert NArray type to float
195
+ self.to_i Convert NArray type to integer
196
+ self.to_a Convert NArray type to Ruby-object
197
+ self.to_s Convert NArray data to String as a binary data.
198
+ self.to_string Convert NArray type to Ruby-object
199
+ containing Strings as printed elements
200
+
201
+ Iteration
202
+ self.each {|i| ...}
203
+ self.collect {|i| ...}
204
+ self.collect! {|i| ...}
205
+
206
+ Byte swap
207
+ self.swap_byte swap byte order
208
+ self.hton convert to network byte order
209
+ self.ntoh
210
+ self.htov convert to VAX byte order
211
+ self.vtoh
212
+
213
+ Boolean / mask related
214
+ self.count_false count # of elements whose value == 0 (only for
215
+ byte, sint, and int)
216
+ self.count_true count # of elements whose value != 0 (only for
217
+ byte, sint, and int)
218
+ self.mask( mask ) same as self[ mask ], but exclusively for masking.
219
+ Unlike [], a int or sint mask is accepted.
220
+
221
+ Complex compound number
222
+ self.real
223
+ self.imag
224
+ self.conj
225
+ self.angle atan2(self.imag, self.real)
226
+ self.imag= other set imaginary part
227
+ self.im multiply by imaginary unit
228
+
229
+ NMath module
230
+ sqrt(x)
231
+ exp(x)
232
+ log(x)
233
+ log10(x)
234
+ log2(x)
235
+ atan2(x,y)
236
+ sin,cos,tan
237
+ sinh,cosh,tanh
238
+ asin,acos,atan
239
+ asinh,acosh,atanh
240
+ csc,sec,cot
241
+ csch,sech,coth
242
+ acsc,asec,acot
243
+ acsch,asech,acoth
244
+ covariance (no idea why NMath::covariance doesn't work)
245
+
246
+
247
+ FFTW module
248
+ (separate module)
249
+ fftw(x,[1|-1])
250
+ convol(a,b) convolution with FFTW
251
+
252
+
253
+ NMatrix
254
+
255
+ Subclass of NArray. First 2 dimensions are used as Matrix.
256
+ Residual dimensions are treated as Multi-dimensional array.
257
+ The order of Matrix dimensions is opposite from
258
+ the notation of mathematics: a_ij => a[j,i]
259
+
260
+ Methods:
261
+ +,- enable if other is NMatrix.
262
+ * Matrix product if other is NMatrix or NVector.
263
+ Scalar product if other is Numeric or NArray.
264
+ ex: NMatrix[[1,2],[3,4]] * [1,10]
265
+ == NMatrix[ [[1,2],[3,4]], [[10,20],[30,40]] ]
266
+ / Scalar division if other is Numeric or NArray.
267
+ Solve Linear Equation with LU factorization
268
+ if other is square NMatrix. a/b == b.lu.solve(a)
269
+
270
+ transpose transpose Matrix dimensions if argument omitted.
271
+ diagonal(val)
272
+ diagonal!(val) set val to diagonal elements. (set 1 if omitted)
273
+ unit set 1 to diagonal elements.
274
+ inverse Inverse matrix.
275
+ lu compute LU factorization.
276
+ return NMatrixLU class object.
277
+
278
+ NVector
279
+
280
+ Subclass of NArray. First 1 dimension is used as Vector.
281
+ Residual dimensions are treated as Multi-dimensional array.
282
+
283
+ Methods:
284
+ +,- enable if other is NVector.
285
+ * Matrix product if other is NMatrix.
286
+ Inner product if other is NVector.
287
+ Scalar product if other is Numeric or NArray.
288
+ / Scalar division if other is Numeric or NArray.
289
+ Solve Linear Equation with LU factorization
290
+ if other is square NMatrix. v/m == m.lu.solve(v)
291
+
292
+
293
+ NMatrixLU
294
+
295
+ Created by NMatrix#lu method.
296
+ Including LU (NMatrix) and pivot (NVector).
297
+
298
+ Methods:
299
+ solve(other) Solve with the result of LU factorization.
300
+ other should be NMatrix or NVector instance.
data/src/SPEC.ja ADDED
@@ -0,0 +1,284 @@
1
+
2
+ Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA
3
+
4
+
5
+ $B%/%i%9%a%=%C%I(B:
6
+ NArray.new(typecode, size, ...) $BG[Ns$r@8@.$9$k!#MWAG$O(B0$B$G=i4|2=!#(B
7
+
8
+ NArray.byte(size,...) 1 byte unsigned integer
9
+ NArray.sint(size,...) 2 byte signed integer
10
+ NArray.int(size,...) 4 byte signed integer
11
+ NArray.sfloat(size,...) single precision float
12
+ NArray.float(size,...) double precision float
13
+ NArray.scomplex(size,...) single precision complex
14
+ NArray.complex(size,...) double precision complex
15
+ NArray.object(size,...) Ruby object
16
+ $B0J>eMWAG$O(B0$B$^$?$O(Bnil$B$G=i4|2=!#(B
17
+
18
+ NArray.to_na(array) NArray$B$KJQ49(B
19
+ NArray.to_na(string,type[,size,..])
20
+ NArray[...]
21
+ NArray[1,5,10.0] #=> NArray.float(3):[1.0, 5.0, 10.0]
22
+ NArray[1..10] #=> NArray.int(10):[1,2,3,4,5,6,7,8,9,10]
23
+
24
+
25
+ $B%/%i%9JQ?t(B:
26
+ CLASS_DIMENSION $B%G!<%?$H$7$F07$o$l$k<!85!#(B
27
+ NArray$B$O(B0$B!#(BNVector$B$O(B1$B!#(BNMatrix$B$O(B2$B!#(B
28
+
29
+ $BG[Ns>pJs;2>H(B
30
+ self.dim $B<!85(B($B%$%s%G%C%/%9$N?t(B)$B$rJV$9!#(B
31
+ self.rank $B<!85(B($B%$%s%G%C%/%9$N?t(B)$B$rJV$9!#(B
32
+ self.shape $B<!85$4$H$N%5%$%:$rJV$9!#(B
33
+ self.total $BA4MWAG?t$rJV$9!#(B
34
+
35
+ $B%$%s%G%C%/%9;2>H(B
36
+ self[ dim0, dim1, ... ]
37
+
38
+ -- $B%$%s%G%C%/%90z?t$K;XDj$G$-$k$b$N(B: $B?tCM!"HO0O!"G[Ns!"(Btrue, false
39
+ -- $B%$%s%G%C%/%9$N=g=x(B: FORTRAN $B7?(B
40
+ -- $BE:;z0z?t$,(B1$B$D$N>l9g!"B?<!85G[Ns$O(Bflatten$B$5$l$?(B1$B<!85G[Ns$H$_$J$5$l$k!#(B
41
+ $BNc(B: a $B$,(B 3x3 $BG[Ns$N$H$-!"(Ba[3] $B$O(B a[0,1] $B$NMWAG$r;X$9!#(B
42
+
43
+ a[ 1, 2, -1 ] $BMWAG$N<h$j=P$7!#Ii?t$O:G8e$+$i?t$($k(B(-1$B$,:G8e(B)
44
+ $BMWAG;XDj$N<!85$O=LLs$5$l$k!#(B
45
+ a[ 0..3, 4..1 ] $BHO0O<h$j=P$7!#HO0O$N:G8e$,:G=i$h$jA0$J$i$P5U=g$K$J$k!#(B
46
+ a[ [1,4,2] ] $B%$%s%G%C%/%9G[Ns!#MWAG$,(B[a[1],a[4],a[2]]$B$N(BNArray$B$,JV$k!#(B
47
+ a[] a.dup $B$HF1$8!#(B
48
+ a[ 0, true ] a[0, 0..-1] $B$HF1$8!#(B
49
+ a[ 0, false ] a$B$,(B3$B<!85$N$H$-!"(Ba[0,true,true] $B$HF1$8!#(B
50
+ $B>JN,$5$l$?<!85$9$Y$F$K(Btrue$B$r;XDj$7$?$N$HF1$8!#(B
51
+ a[ mask ] $B%^%9%-%s%0(B. mask $B$OD9$5$,(B a $B$HEy$7$$(B byte $B7?(B
52
+ NArray. mask $B$N3FMWAG$NCM$K1~$8$F!"(Ba $B$N$=$l$>(B
53
+ $B$l$OMn$5$l$k(B(0$B$N>l9g(B)$B$+!"J];}$5$l$k(B(0$B0J30$N>l9g(B)$B!#(B
54
+ $BNc(B:
55
+ a=NArray.float(2,2).indgen!
56
+ p a[ a.lt 3 ]
57
+ --> [ 0.0, 1.0, 2.0 ]
58
+ (a.lt 3 $B$O(B byte $B7?(B NArray $B$rJV$9(B)
59
+ ($BF1$8$3$H$O(B a[ (a.lt 3).where ] $B$G$b=PMh$k(B)
60
+
61
+ -- self.slice(...) self[...] $B$HF1$8$@$,!"D9$5$,#1$K$J$C$?<!85$rMn(B
62
+ $B$5$:(B(self[]$B$OMn$9(B)$B!"$b$H$N%i%s%/$rJ]$D!#C"$7!"(B
63
+ 1$B<!85%$%s%G%C%/%9IU$1$H%^%9%-%s%0$ONc30(B([]$B$HF1(B
64
+ $B$8(B)$B!#(B
65
+
66
+ $B%$%s%G%C%/%9BeF~!#(B-- $B<h=P$7$H$[$\F1$8%k!<%k!#(B
67
+
68
+ a[ 1, 2, 3 ] = 1
69
+ a[ 0..3, 1..4, 2..5 ] = 2
70
+ a[ [1,3,2,4], true ] = 3
71
+ a[] = 4 a.fill!(4) $B$HF1$8!#(B
72
+
73
+ a[0..2] = b[1..5] --> $BMWAG?t$,0[$J$k$N$G%(%i!<!#(B
74
+ a[1,2] = b[0..2,1..3] [1,2]$B$r;OE@$H$7$FBeF~!#(B
75
+ a[0..2,0..3] = b[0..2,1] $B7+$jJV$7BeF~!#(B
76
+ ( a[0,0]=b[0,1],..,a[0,3]=b[0,1] )
77
+
78
+ $BCM$N%;%C%H!#(B
79
+ self.indgen!([start[,step]]) start$B$+$i(Bstep$B$E$DA}2C$7$?CM$r%;%C%H!#(B
80
+ self.fill!(value) $B$9$Y$F$NMWAG$K(Bvalue$B$r%;%C%H!#(B
81
+ self.random!(max) 0<=x<max $B$N0lMM$J%i%s%@%`CM$r@8@.!#(B
82
+ using MT19337
83
+ self.randomn $BJ?6Q(B0$B!"J,;6(B1$B$N@55,J,I[$N%i%s%@%`CM$r@8@.!#(B
84
+ (Box-Muller)
85
+ NArray.srand([seed]) $BMp?t$N%7!<%I$r@_Dj!#(B
86
+ $B>JN,;~$O;~9o$+$i<+F0@8@.!#(B
87
+
88
+ $B1i;;(B: $BMWAG$4$H$K$*$3$J$&!#(B
89
+ a = NArray.float(3,3).indgen
90
+ b = NArray.float(3,3).fill(10)
91
+ c = a*b # --> NArray.float(3,3)
92
+
93
+ a = NArray.float(3,1).indgen
94
+ b = NArray.float(1,3).fill(10)
95
+ c = a*b # --> NArray.float(3,3) -- size=1$B$N<!85$O3HD%$9$k!#(B
96
+
97
+ $B;;=Q1i;;;R(B
98
+ -self
99
+ self + other
100
+ self - other
101
+ self * other
102
+ self / other
103
+ self % other
104
+ self ** other
105
+ self.abs
106
+
107
+ self.add! other
108
+ self.sbt! other
109
+ self.mul! other
110
+ self.div! other
111
+ self.mod! other
112
+
113
+ self.mul_add(other,dim,...) (self * other).sum(dim,...)$B$H$[$\F1$8!#(B
114
+ $B$?$@$7ESCf$GG[Ns$r:n$i$J$$!#(B
115
+
116
+ $B%S%C%H1i;;;R(B($B@0?t$N$_2DG=(B)
117
+ ~self
118
+ self & other
119
+ self | other
120
+ self ^ other
121
+
122
+ $BHf3S(B
123
+ -- $BMWAG$4$H$KCM$rHf3S$7!"7k2L$r(BBYTE$B7?(B NArray$B$rJV$9!#(B
124
+ true/false$B$G$J$$$3$H$KCm0U!#(B
125
+ self.eq other ( ver 0.5.4 $B0J9_!"(B== $B1i;;;R$OGQ;_$7$^$7$?!#(B)
126
+ self.ne other
127
+ self.gt other
128
+ self > other
129
+ self.ge other
130
+ self >= other
131
+ self.lt other
132
+ self < other
133
+ self.le other
134
+ self <= other
135
+
136
+ self.and other $BMWAG$4$H$N>r7oHf3S!#(B
137
+ self.or other
138
+ self.xor other
139
+ self.not other
140
+
141
+ self.all? $BMWAG$,$9$Y$F??$J$i$P??!#(B
142
+ self.any? $BMWAG$N$I$l$+$,??$J$i$P??!#(B
143
+ self.none? $BMWAG$N$I$l$+$,??$J$i$P??!#(B
144
+ self.where $BMWAG$,??$N%$%s%G%C%/%9G[Ns$rJV$9!#(B
145
+ self.where2 $BMWAG$,??$H56$N%$%s%G%C%/%9G[Ns$r4^$`(B(Ruby)$BG[Ns$rJV$9!#(B
146
+
147
+ $BNc(B: idx_t,idx_f = (a>12).where2
148
+
149
+ $BE}7W(B
150
+ self.sum(dim,..) $B;XDj$7$?<!85$NOB!#(B
151
+ self.mean(dim,..) $B;XDj$7$?<!85$NJ?6Q!#(B
152
+ self.stddev(dim,..) $B;XDj$7$?<!85$NI8=`JP:9!#(B
153
+ self.min(dim,..) $B;XDj$7$?<!85$N:G>.!#(B
154
+ self.max(dim,..) $B;XDj$7$?<!85$N:GBg!#(B
155
+ ($B>JN,;~$OA4$F$N<!85!#(BRange$B;XDj2D!#(B)
156
+ self.median(dim) 0..dim$B$N<!85$NCf1{CM!#>JN,;~$O$9$Y$F$N<!85!#(B
157
+
158
+ $B%=!<%H(B
159
+ self.sort(dim) 0..dim$B$N<!85$G%=!<%H!#>JN,;~$O$9$Y$F$N<!85!#(B
160
+ self.sort_index(dim) $B%=!<%H$7$?%$%s%G%C%/%9$rJV$9!#(B
161
+ self[self.sort_index] $B$O(B self.sort $B$HF1Ey!#(B
162
+
163
+ $BE>CV(B
164
+ self.transpose( dim0, dim1, .. )
165
+ $BG[Ns$NE>CV!#(Bself$B$NBh(B(dim0)$B<!85$,?7$7$$G[Ns$NBh(B0$B<!85$K$J$k!#(B
166
+ $BIi?t$O8e$+$i$N=gHV!#(B
167
+ transpose(-1,1..-2,0) $B$G:G=i$H:G8e$rF~$l49$(!#(B
168
+
169
+ $B%$%s%G%C%/%9$NJQ99(B ($BMWAG?t$OITJQ(B)
170
+ self.reshape!(size,...)
171
+ self.shape= size,...
172
+ self.newdim!(dim,...) $B;XDj0LCV$K%5%$%:(B1$B$N<!85$rA^F~$9$k!#(B
173
+
174
+ $B%G!<%?$N;2>H(B
175
+ self.refer self$B$N%G!<%?$r;2>H$9$kJL$N%*%V%8%'%/%H$r:n@.!#(B
176
+ self.reshape(size,...) self.refer.reshape! $B$HF1MM!#(B
177
+ self.newdim(dim,...) self.refer.newdim! $B$HF1MM!#(B
178
+
179
+ $B7?JQ49(B
180
+ self.floor self$B$h$j>.$5$$:GBg$N@0?t$rJV$9!#(B
181
+ self.ceil self$B$h$jBg$-$$:G>.$N@0?t$rJV$9!#(B
182
+ self.round self$B$K$b$C$H$b6a$$@0?t$rJV$9!#(B
183
+ self.to_f $BCM$rIbF0>.?tE@?t$KJQ49$9$k!#(B
184
+ self.to_i $BCM$r@0?t$KJQ49$9$k!#(B
185
+ self.to_a $BCM$r(BRuby$B$NG[Ns$KJQ49$9$k!#(B
186
+ self.to_s $B%P%$%J%j%G!<%?$r$=$N$^$^(BRuby$B$NJ8;zNs%G!<%?$KJQ49$9$k!#(B
187
+ self.to_string $B3FMWAG$rJ8;zNs$KJQ49$9$k!#(B
188
+
189
+ $B%$%F%l!<%?(B
190
+ self.each {|i| ...}
191
+ self.collect {|i| ...}
192
+ self.collect! {|i| ...}
193
+
194
+ $B%P%$%H%9%o%C%W(B
195
+ self.swap_byte $B%P%$%H%9%o%C%W(B
196
+ self.hton $B%M%C%H%o!<%/%P%$%H%*!<%@!<$KJQ49(B
197
+ self.ntoh
198
+ self.htov VAX$B%P%$%H%*!<%@!<$KJQ49(B
199
+ self.vtoh
200
+
201
+ Boolean / $B%^%9%/4X78(B
202
+ self.count_false $BCM(B == 0 $B$NMWAG?t(B (byte, sint, int $B$N$_(B)
203
+ self.count_true $BCM(B == 1 $B$NMWAG?t(B (byte, sint, int $B$N$_(B)
204
+ self.mask( mask ) self[ mask ] $B$HF1$8$@$+%^%9%-%s%0@lMQ(B.
205
+ [] $B$H0c$$(B int, sint $B$N%^%9%/$b;H$($k(B.
206
+
207
+ $BJ#AG?t(B
208
+ self.real
209
+ self.imag
210
+ self.conj
211
+ self.angle atan2(self.imag, self.real)
212
+ self.imag= other $B5u?tItJ,$K(Bother$B$r%;%C%H!#(B
213
+ self.im $B5u?tG\!#(B
214
+
215
+ NMath $B%b%8%e!<%k(B
216
+ sqrt(x)
217
+ exp(x)
218
+ log(x)
219
+ log10(x)
220
+ log2(x)
221
+ atan2(x,y)
222
+ sin,cos,tan
223
+ sinh,cosh,tanh
224
+ asin,acos,atan
225
+ asinh,acosh,atanh
226
+ csc,sec,cot
227
+ csch,sech,coth
228
+ acsc,asec,acot
229
+ acsch,asech,acoth
230
+ covariance
231
+
232
+
233
+ FFTW $B%b%8%e!<%k(B (fftw-2.1.3$B$r(Bshared lib$B$G%3%s%Q%$%k$7$?$b$N$G3NG'(B)
234
+ ($BJL%b%8%e!<%k(B)
235
+ fftw(x,[1|-1])
236
+ convol(a,b) FFTW$B$rMQ$$$?>v$_9~$_!#(B
237
+
238
+
239
+ NMatrix
240
+
241
+ NArray$B$N%5%V%/%i%9!#:G=i$N(B2$B<!85$r(BMatrix$B$H$7$FMQ$$$k!#(B
242
+ $B;D$j$N<!85$OB?<!85G[Ns$H$7$F07$o$l$k!#(B
243
+ $B<!85$N=g=x$O!"?t3X$G$NI=5-$H$O5U(B: a_ij => a[j,i]
244
+
245
+ $B%a%=%C%I(B:
246
+ +,- $BAj<j$,(B NMatrix $B$N$H$-$K1i;;2D!#(B
247
+ * $BAj<j$,(B NMatrix $B$^$?$O(B NVector $B$N$H$-$O(B Matrix$B@Q!#(B
248
+ $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(B Scalar$B@Q!#(B
249
+ $BNc(B: NMatrix[[1,2],[3,4]] * [1,10]
250
+ == NMatrix[ [[1,2],[3,4]], [[10,20],[30,40]] ]
251
+ / $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(BScalar$B=|;;!#(B
252
+ $BAj<j$,(B square NMatrix $B$N$H$-$O(BLU$B$K$h$j@~7AJ}Dx<0$r2r$/!#(B
253
+ a/b == b.lu.solve(a)
254
+
255
+ transpose $B0z?t$r>JN,$7$?>l9g$O!":G=i$N(BMatrix$B<!85$r8r49!#(B
256
+ diagonal(other)
257
+ diagonal!(other) $BBP3QMWAG$KCM$r%;%C%H!#0z?t>JN,;~$O(B1$B$r%;%C%H!#(B
258
+ I $BBP3QMWAG$KCM$K(B1$B$r%;%C%H!#(B
259
+ inverse $B5U9TNs(B
260
+ lu LU$BJ,2r$r7W;;!#(BNMatrixLU $B%/%i%9$N%$%s%9%?%s%9$rJV$9!#(B
261
+
262
+
263
+ NVector
264
+
265
+ NArray$B$N%5%V%/%i%9!#:G=i$N(B1$B<!85$r(BVector$B$H$7$FMQ$$$k!#(B
266
+ $B;D$j$N<!85$OB?<!85G[Ns$H$7$F07$o$l$k!#(B
267
+
268
+ $B%a%=%C%I(B:
269
+ +,- $BAj<j$,(B NVector $B$N$H$-$K1i;;2D!#(B
270
+ * $BAj<j$,(B NMatrix $B$N$H$-$O(B Matrix$B@Q!#(B
271
+ $BAj<j$,(B NVector $B$N$H$-$O(B $BFb@Q!#(B
272
+ $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(B Scalar$B@Q!#(B
273
+ / $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(B Scalar$B=|;;!#(B
274
+ $BAj<j$,(B square NMatrix $B$N$H$-$O(BLU$B$K$h$j@~7AJ}Dx<0$r2r$/!#(B
275
+ v/m == m.lu.solve(v)
276
+
277
+ NMatrixLU
278
+
279
+ NMatrix#lu $B%a%=%C%I$K$h$j:n$i$l$k!#(B
280
+ LU (NMatrix) $B$H(B pivot (NVector) $B$r4^$`!#(B
281
+
282
+ $B%a%=%C%I(B:
283
+ solve(other) LU$BJ,2r$N7k2L$r;H$C$F(B other $B$r2r$/!#(B
284
+ other $B$O(B NMatrix $B$^$?$O(B NVector $B$N%$%s%9%?%s%9!#(B