narray 0.5.9.4

Sign up to get free protection for your applications and to get access to all the features.
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