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
@@ -0,0 +1,57 @@
1
+ # NArray demo : life game
2
+ # by Masahiro Tanaka <masa@ir.isas.ac.jp> 2001-01-18
3
+
4
+ require 'narray'
5
+ require 'nimage'
6
+
7
+ class NArray
8
+ def magnify(n)
9
+ src = shape.collect{|x| [1,x]}.flatten
10
+ dst = shape.collect{|x| [n,x]}.flatten
11
+ a = NArray.new(typecode,*dst)
12
+ a[*[true]*(rank*2)] = self.reshape(*src)
13
+ a.reshape!(*NArray[*shape]*n)
14
+ end
15
+ end
16
+
17
+ class LifeGame
18
+ def initialize(nx,ny)
19
+ @d = NArray.byte(nx,ny)
20
+ w = 50
21
+ @d[nx/2-w,ny/2-w] = NArray.byte(w*2+1,w*2+1).random!(2)
22
+ @step = 0
23
+ @win = NImage.show @d #.magnify(2)
24
+ end
25
+
26
+ def life_step
27
+ sum =
28
+ @d[0..-3,0..-3] + @d[0..-3,1..-2] + @d[0..-3,2..-1] +
29
+ @d[1..-2,0..-3] + @d[1..-2,2..-1] +
30
+ @d[2..-1,0..-3] + @d[2..-1,1..-2] + @d[2..-1,2..-1]
31
+ @d[1,1] =
32
+ (sum.eq 3) | ((sum.eq 2) & @d[1..-2,1..-2])
33
+ @step += 1
34
+ @win.update( (@d*(NImage.ncolors-1)).to_s )
35
+ end
36
+
37
+ def close
38
+ @win.close
39
+ end
40
+
41
+ attr_reader :step
42
+ end
43
+
44
+ srand(1)
45
+ a = LifeGame.new(200,200)
46
+
47
+ print "Hit return key to start..."
48
+ STDIN.getc
49
+
50
+ begin
51
+ loop{ a.life_step }
52
+ ensure
53
+ printf "step=%i\n",a.step
54
+ print "Hit return key..."
55
+ STDIN.getc
56
+ a.close
57
+ end
@@ -0,0 +1,41 @@
1
+ # NArray demo : Mandelbrot
2
+
3
+ require 'narray'
4
+
5
+ def mandel(w,h)
6
+ zoom=3.5
7
+
8
+ z = ( NArray.scomplex(w,1).indgen!/w-0.65 )*zoom +
9
+ ( NArray.scomplex(1,h).indgen!/h-0.5 )*(zoom*1.im)
10
+ c = z.dup
11
+ a = NArray.sint(h,w)
12
+ idx = NArray.int(h,w).indgen!
13
+
14
+ for i in 1..30
15
+ z = z**2+c
16
+ idx_t,idx_f = (z.abs>2).where2
17
+ print i," size=",idx_t.size,"\n"
18
+ ii = idx[idx_t]
19
+ a[ii] = i
20
+ break if idx_f.size==0
21
+ idx = idx[idx_f]
22
+ z = z[idx_f]
23
+ c = c[idx_f]
24
+ end
25
+ a
26
+ end
27
+
28
+
29
+ #
30
+ # TEST TEST TEST
31
+ #
32
+ if __FILE__ == $0
33
+
34
+ require 'nimage'
35
+
36
+ win = NImage.show mandel(400,400)
37
+
38
+ print "Hit return key..."
39
+ STDIN.getc
40
+ win.close
41
+ end
@@ -0,0 +1,12 @@
1
+ require 'mkmf'
2
+
3
+ # configure options:
4
+ # --with-x11-dir=path
5
+ # --with-x11-include=path
6
+ # --with-x11-lib=path
7
+ dir_config("x11")
8
+
9
+ #have_header("X11/Xlib.h")
10
+ #have_header("X11/Xutil.h")
11
+ have_library("X11", "XOpenDisplay")
12
+ create_makefile("nimage_c")
@@ -0,0 +1,51 @@
1
+ require "narray"
2
+ require "nimage_c"
3
+
4
+ def NImage.show image
5
+
6
+ r1 = image.min
7
+ r2 = image.max
8
+ b = NArray.byte(*image.shape)
9
+ b[]= (image.to_f-r1)/(r2-r1)*(NImage.ncolors-1)
10
+
11
+ NImage.new b.to_s, *b.shape
12
+ end
13
+
14
+ def NImage.standard_color
15
+ ncol = 32/4
16
+ t = NArray.byte(ncol).indgen! * (255.0/ncol)
17
+ r = NArray.byte(ncol,4)
18
+ g = NArray.byte(ncol,4)
19
+ b = NArray.byte(ncol,4)
20
+
21
+ # Color map
22
+ r[0..-1,1] =
23
+ g[0..-1,2] =
24
+ b[0..-1,0] =
25
+ b[-1..0,1] =
26
+ b[0..-1,3] = t
27
+ r[0..-1,2] =
28
+ r[0..-1,3] =
29
+ g[0..-1,3] = 255
30
+
31
+ NImage.colormap r.to_s, g.to_s, b.to_s
32
+ end
33
+
34
+ # Initalize colormap
35
+ #NImage.standard_color
36
+
37
+ #
38
+ # TEST TEST TEST
39
+ #
40
+ if __FILE__ == $0
41
+
42
+ x = NArray.sfloat(200,1).indgen!(-100)/50*3.1415
43
+ y = NArray.sfloat(1,200).indgen!(-100)/50*3.1415
44
+ z = NMath.cos(x) * NMath.sin(y)
45
+
46
+ v = NImage.show z
47
+
48
+ print "Hit return key..."
49
+ STDIN.getc
50
+ v.close
51
+ end
@@ -0,0 +1,328 @@
1
+ /*
2
+ NImage
3
+ --- A Ruby Extension Library for displaying Images on X11
4
+ (C) Copyright 2000 by Masahiro TANAKA
5
+ */
6
+
7
+ #include <stdio.h>
8
+ #include <X11/Xlib.h>
9
+ #include <X11/Xutil.h>
10
+ #include "ruby.h"
11
+
12
+ static VALUE cNImage;
13
+
14
+ struct NIMG {
15
+ char *image;
16
+ int width;
17
+ int height;
18
+ Window window;
19
+ };
20
+
21
+ #define MAX_COLOR 256
22
+
23
+ static Display *display;
24
+ static GC gc=NULL;
25
+ static XColor color[MAX_COLOR];
26
+
27
+ static int ncolor = 32;
28
+ static int color_allocated = 0;
29
+
30
+ static void color_alloc_gray()
31
+ {
32
+ int i;
33
+ Colormap cmap;
34
+
35
+ cmap = DefaultColormap(display, 0);
36
+ for (i=0; i<ncolor; i++) {
37
+ color[i].red =
38
+ color[i].green =
39
+ color[i].blue = (i*65535)/ncolor;
40
+ if ( !XAllocColor( display, cmap, &color[i] ) )
41
+ rb_raise(rb_eRuntimeError, "ERROR: cannot allocate Color\n" );
42
+ }
43
+ color_allocated = 1;
44
+ }
45
+
46
+
47
+ static void color_alloc(int n, char *r, char *g, char *b)
48
+ {
49
+ int i;
50
+ Colormap cmap;
51
+
52
+ cmap = DefaultColormap(display, 0);
53
+ for (i=0; i<n; i++) {
54
+ color[i].red = r[i]*256;
55
+ color[i].green = g[i]*256;
56
+ color[i].blue = b[i]*256;
57
+ if ( !XAllocColor( display, cmap, &color[i] ) )
58
+ rb_raise(rb_eRuntimeError, "ERROR: cannot allocate Color\n" );
59
+ }
60
+ ncolor = n;
61
+ color_allocated = 1;
62
+ }
63
+
64
+
65
+ static void color_free()
66
+ {
67
+ int i;
68
+ Colormap cmap;
69
+
70
+ if (color_allocated) {
71
+ cmap = DefaultColormap(display, 0);
72
+ for (i=0; i<ncolor; i++)
73
+ XFreeColors(display, cmap, &color[i].pixel, 1, 0);
74
+ color_allocated = 0;
75
+ }
76
+ }
77
+
78
+ static VALUE nimg_colormap(VALUE self, VALUE val_r, VALUE val_g, VALUE val_b)
79
+ {
80
+ char *r, *g, *b;
81
+ int nr, ng, nb, n;
82
+
83
+ r = RSTRING(val_r)->ptr;
84
+ nr = RSTRING(val_r)->len;
85
+ g = RSTRING(val_g)->ptr;
86
+ ng = RSTRING(val_g)->len;
87
+ b = RSTRING(val_b)->ptr;
88
+ nb = RSTRING(val_b)->len;
89
+
90
+ n = (nr<ng) ? nr:ng;
91
+ n = (n <nb) ? n :nb;
92
+ if (n > MAX_COLOR)
93
+ rb_raise(rb_eArgError, "exceed maximum # of colors");
94
+
95
+ color_free();
96
+ color_alloc(n,r,g,b);
97
+ XFlush(display);
98
+
99
+ return Qnil;
100
+ }
101
+
102
+ static VALUE nimg_ncolors(VALUE self)
103
+ {
104
+ return INT2NUM(ncolor);
105
+ }
106
+
107
+ static XImage *create_ximage(struct NIMG *nimg)
108
+ {
109
+ XImage *image;
110
+ Visual *visual;
111
+ int malloc_len;
112
+ int depth;
113
+
114
+ depth = DefaultDepth(display, DefaultScreen(display));
115
+ visual = CopyFromParent;
116
+
117
+ image = XCreateImage( display, visual, depth,
118
+ ZPixmap, 0, 0, nimg->width, nimg->height,
119
+ 32, 0 );
120
+
121
+ malloc_len = image->bytes_per_line * image->height;
122
+ image->data = (unsigned char*) malloc(malloc_len);
123
+ memset(image->data, 0, malloc_len);
124
+
125
+ return image;
126
+ }
127
+
128
+
129
+ static void nimg_put_image(struct NIMG *nimg)
130
+ {
131
+ XImage *ximage;
132
+ int i, j, k;
133
+
134
+ if (!color_allocated)
135
+ color_alloc_gray();
136
+
137
+ ximage = create_ximage(nimg);
138
+
139
+ k=0;
140
+ for (j=nimg->height-1; j>=0; j--)
141
+ for (i=0; i<nimg->width; i++)
142
+ XPutPixel(ximage, i,j, color[nimg->image[k++]].pixel);
143
+
144
+ XPutImage( display, nimg->window, gc,
145
+ ximage, 0, 0,
146
+ 0,0, nimg->width, nimg->height );
147
+
148
+ XFlush(display);
149
+ XDestroyImage(ximage);
150
+ }
151
+
152
+
153
+ static void init_display(void)
154
+ {
155
+ display = XOpenDisplay( NULL );
156
+ if ( display==NULL )
157
+ rb_raise(rb_eRuntimeError, "ERROR: cannot open display\n");
158
+ }
159
+
160
+
161
+ static void init_wm(struct NIMG *nimg)
162
+ {
163
+ XTextProperty text;
164
+ XSizeHints size;
165
+
166
+ /* for window managers */
167
+ text.value = (unsigned char*)"NImage";
168
+ text.encoding = 31;
169
+ text.format = 8;
170
+ text.nitems = strlen( (char*)text.value );
171
+
172
+ size.flags = PPosition | PMinSize | PMaxSize;
173
+ /*size.flags = PPosition | PSize;*/
174
+ size.width =
175
+ size.min_width =
176
+ size.max_width = nimg->width;
177
+ size.height =
178
+ size.min_height =
179
+ size.max_height = nimg->height;
180
+ size.x = 0;
181
+ size.y = 0;
182
+
183
+ XSetWMProperties( display, nimg->window,
184
+ &text, &text, NULL, 0, &size, NULL, NULL );
185
+ }
186
+
187
+
188
+ static void show_window(Window window)
189
+ {
190
+ XEvent event;
191
+ /* show window */
192
+ XMapWindow( display, window );
193
+ do XNextEvent( display, &event );
194
+ while ( event.type != Expose );
195
+ }
196
+
197
+
198
+ static void nimg_init_window(struct NIMG *nimg)
199
+ {
200
+ int screen, depth;
201
+ Window parent, window;
202
+ Visual *visual;
203
+ XSetWindowAttributes attr;
204
+ unsigned long bgcolor;
205
+ unsigned long mask = CWBackingStore | CWEventMask;
206
+ unsigned long event_mask =
207
+ ExposureMask
208
+ | ButtonPressMask
209
+ | ButtonReleaseMask
210
+ | EnterWindowMask
211
+ | LeaveWindowMask
212
+ | KeyPressMask
213
+ | KeyReleaseMask
214
+ | PointerMotionMask
215
+ | StructureNotifyMask ;
216
+
217
+ screen = DefaultScreen( display );
218
+ parent = RootWindow( display, screen );
219
+ depth = DefaultDepth( display, screen );
220
+ visual = DefaultVisual( display, screen );
221
+ bgcolor = BlackPixel( display, screen );
222
+
223
+ attr.backing_store = /*Always*/ WhenMapped;
224
+ attr.event_mask = event_mask;
225
+
226
+ nimg->window =
227
+ XCreateWindow( display, parent,
228
+ 0, 0, nimg->width, nimg->height,
229
+ 1, depth, InputOutput, visual,
230
+ mask, &attr);
231
+ if (gc==NULL)
232
+ gc = XCreateGC( display, nimg->window, 0, 0 );
233
+
234
+ XSetWindowBackground( display, nimg->window, bgcolor );
235
+
236
+ init_wm( nimg );
237
+ show_window( nimg->window );
238
+ }
239
+
240
+
241
+ /* free contents */
242
+ static void
243
+ nimg_free(struct NIMG* nimg)
244
+ {
245
+ free( nimg->image );
246
+ free( nimg );
247
+ }
248
+
249
+
250
+ static VALUE
251
+ nimg_new( VALUE self, VALUE val_image, VALUE val_wid, VALUE val_hei )
252
+ {
253
+ struct NIMG *nimg;
254
+ char *data;
255
+ int i, len;
256
+
257
+ data = RSTRING(val_image)->ptr;
258
+ len = RSTRING(val_image)->len;
259
+
260
+ nimg = ALLOC( struct NIMG );
261
+ nimg->image = ALLOC_N( char, len );
262
+ MEMCPY( nimg->image, data, char, len );
263
+
264
+ nimg->width = NUM2INT(val_wid);
265
+ nimg->height = NUM2INT(val_hei);
266
+
267
+ if (len != nimg->width * nimg->height)
268
+ rb_raise(rb_eArgError, "Image size mismatch");
269
+
270
+ nimg_init_window(nimg);
271
+ nimg_put_image(nimg);
272
+
273
+ return Data_Wrap_Struct(cNImage, NULL, nimg_free, nimg);
274
+ }
275
+
276
+
277
+ static VALUE
278
+ nimg_update( VALUE self, VALUE val_image )
279
+ {
280
+ struct NIMG *nimg;
281
+ char *data;
282
+ int i, len;
283
+
284
+ Data_Get_Struct( self, struct NIMG, nimg );
285
+ data = RSTRING(val_image)->ptr;
286
+ len = RSTRING(val_image)->len;
287
+
288
+ if (len != nimg->width * nimg->height)
289
+ rb_raise(rb_eArgError, "Image size mismatch");
290
+
291
+ MEMCPY( nimg->image, data, char, len );
292
+
293
+ nimg_put_image(nimg);
294
+ return Qnil;
295
+ }
296
+
297
+
298
+ static VALUE
299
+ nimg_close( VALUE self )
300
+ {
301
+ struct NIMG *nimg;
302
+
303
+ Data_Get_Struct( self, struct NIMG, nimg );
304
+ XDestroyWindow( display, nimg->window );
305
+ nimg->window = 0;
306
+ XFlush( display );
307
+ return self;
308
+ }
309
+
310
+
311
+ void
312
+ Init_nimage_c()
313
+ {
314
+ /* open display, etc. */
315
+ init_display();
316
+
317
+ /* define NImage class */
318
+ cNImage = rb_define_class( "NImage", rb_cObject );
319
+
320
+ /* class methods */
321
+ rb_define_singleton_method( cNImage, "new", nimg_new, 3 );
322
+ rb_define_singleton_method( cNImage, "colormap", nimg_colormap, 3 );
323
+ rb_define_singleton_method( cNImage, "ncolors", nimg_ncolors, 0 );
324
+
325
+ /* method */
326
+ rb_define_method( cNImage, "update", nimg_update, 1 );
327
+ rb_define_method( cNImage, "close", nimg_close, 0 );
328
+ }
data/src/speed/add.py ADDED
@@ -0,0 +1,12 @@
1
+ from mybench import *
2
+
3
+ a = bench_array()
4
+ b = bench_array()
5
+
6
+ print "a.typecode:",a.typecode(),", a.shape:",a.shape
7
+ print "b.typecode:",b.typecode(),", b.shape:",b.shape
8
+ print "calculating c = a+b ..."
9
+
10
+ def bench_body(a=a,b=b): c=a+b
11
+
12
+ bench_time(bench_body)
data/src/speed/add.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'mybench'
2
+
3
+ a, b = bench_float
4
+
5
+ print "a = "; p a;
6
+ print "calculating c = a+b ...\n"
7
+
8
+ bench_time{ c = a+b }
@@ -0,0 +1,12 @@
1
+ from mybench import *
2
+
3
+ a = arrayrange(ARRSZ)
4
+ b = arrayrange(ARRSZ)
5
+
6
+ print "a.typecode:",a.typecode(),", a.shape:",a.shape
7
+ print "b.typecode:",b.typecode(),", b.shape:",b.shape
8
+ print "calculating c = a+b ..."
9
+
10
+ def bench_body(a=a,b=b): c=a+b
11
+
12
+ bench_time(bench_body)
@@ -0,0 +1,9 @@
1
+ require 'mybench'
2
+
3
+ a, b = bench_int
4
+
5
+ print "a = "; p a;
6
+ print "b = "; p b;
7
+
8
+ print "calculating c = a+b ...\n"
9
+ bench_time{ c=a+b }
data/src/speed/lu.m ADDED
@@ -0,0 +1,14 @@
1
+ # mesuring performance of Octave
2
+
3
+ n = 1000;
4
+ m = linspace(0,n*n-1,n*n);
5
+ m = rem(m, n+1) + 1;
6
+ m = reshape(m,n,n);
7
+
8
+ printf ("executing %ix%i LU...\n",n,n);
9
+ [t1, u1, s1] = cputime ();
10
+ [l,u,p] = lu(m);
11
+ [t2, u2, s2] = cputime ();
12
+ printf (" Time: %5.2f sec\n", u2 - u1);
13
+ # Time: 20.43 sec, GNU Octave, version 2.0.16 (sparc-sun-solaris2.7).
14
+ exit
data/src/speed/lu.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'mybench'
2
+
3
+ n = 1000
4
+ m = NArray.float(n,n).indgen!
5
+ m = m % (n+1) + 1
6
+ m = NMatrix.ref(m).transpose
7
+
8
+ puts 'm ='
9
+ p m
10
+
11
+ printf "executing %ix%i LU...\n",n,n
12
+ bench_time(1){lu = m.lu}
13
+ exit
14
+
15
+ puts 'lu='
16
+ p lu
17
+ puts 'y='
18
+ p y
19
+ puts 'm*y='
20
+ p m*y
21
+
22
+ #system "ps -v"
data/src/speed/mat.m ADDED
@@ -0,0 +1,23 @@
1
+ # mesuring performance of Octave
2
+
3
+ n = 500;
4
+
5
+ a = linspace(0,n*n-1,n*n);
6
+ a = rem(a, n+1) + 1;
7
+ a = reshape(a,n,n);
8
+
9
+ b = linspace(0,n*n-1,n*n);
10
+ b = rem(b, n-1) + 1;
11
+ b = reshape(b,n,n);
12
+
13
+ printf ("executing product of %ix%i Matrix...\n",n,n);
14
+ printf ("c=a*b\n");
15
+
16
+ [t1, u1, s1] = cputime ();
17
+ c = a*b;
18
+ [t2, u2, s2] = cputime ();
19
+
20
+ printf (" Time: %f\n", u2 - u1);
21
+ # Time: 7.280000
22
+ # GNU Octave, version 2.0.16 (sparc-sun-solaris2.7).
23
+ exit
data/src/speed/mat.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'mybench'
2
+
3
+ n = 500
4
+
5
+ a = NArray.float(n,n).indgen!
6
+ a = a % (n+1) + 1
7
+ a = NMatrix.ref(a)#.transpose
8
+
9
+ b = NArray.float(n,n).indgen!
10
+ b = b % (n-1) + 1
11
+ b = NMatrix.ref(b)#.transpose
12
+
13
+ c = 0
14
+
15
+ puts 'a='
16
+ p a
17
+ puts 'b='
18
+ p b
19
+
20
+ printf "executing %ix%i Matrix product...\n",n,n
21
+ puts 'c=a*b'
22
+
23
+ bench_time(1) { c=a*b }
24
+
25
+ # time: 4.21 sec
26
+
27
+ puts 'c='
28
+ p c
data/src/speed/mul.py ADDED
@@ -0,0 +1,12 @@
1
+ from mybench import *
2
+
3
+ a = bench_array()
4
+ b = bench_array()
5
+
6
+ print "a.typecode:",a.typecode(),", a.shape:",a.shape
7
+ print "b.typecode:",b.typecode(),", b.shape:",b.shape
8
+ print "calculating c = a*b ..."
9
+
10
+ def bench_body(a=a,b=b): c=a*b
11
+
12
+ bench_time(bench_body)
data/src/speed/mul.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'mybench'
2
+
3
+ a, b = bench_float
4
+
5
+ print "a = "; p a;
6
+ print "b = "; p b;
7
+ print "calculating c = a*b ...\n"
8
+
9
+ bench_time{ c = a*b }
data/src/speed/mul2.py ADDED
@@ -0,0 +1,15 @@
1
+ from mybench import *
2
+
3
+ a = reshape(arrayrange(1000),(1000,1)).astype(Float64)
4
+ b = reshape(arrayrange(1000),(1,1000)).astype(Float64)
5
+
6
+ print "a.typecode:",a.typecode(),", a.shape:",a.shape
7
+ print "b.typecode:",b.typecode(),", b.shape:",b.shape
8
+ print "calculating c = a*b ..."
9
+
10
+ def bench_body(a=a,b=b): c=a*b
11
+
12
+ bench_time(bench_body)
13
+
14
+ c = a*b
15
+ print "c.shape:", c.shape,"\n"
data/src/speed/mul2.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'mybench'
2
+
3
+ a = NArray.float(1000,1).indgen!
4
+ b = NArray.float(1,1000).indgen!
5
+ c = 0
6
+
7
+ print "a = "; p a;
8
+ print "b = "; p b;
9
+ print "calculating c = a*b ...\n"
10
+
11
+ bench_time{ c = a*b }
12
+
13
+ print "c = "; p c;
@@ -0,0 +1,12 @@
1
+ from mybench import *
2
+
3
+ a = bench_array(Complex64)
4
+ b = bench_array(Complex64)
5
+
6
+ print "a.typecode:",a.typecode(),", a.shape:",a.shape
7
+ print "b.typecode:",b.typecode(),", b.shape:",b.shape
8
+ print "calculating c = a*b ..."
9
+
10
+ def bench_body(a=a,b=b): c=a*b
11
+
12
+ bench_time(bench_body)
@@ -0,0 +1,9 @@
1
+ require 'mybench'
2
+
3
+ a, b = bench_complex
4
+
5
+ print "a = "; p a;
6
+ print "b = "; p b;
7
+ print "calculating c = a*b ...\n"
8
+
9
+ bench_time{ c = a*b }