narray 0.5.9.5 → 0.5.9.6
Sign up to get free protection for your applications and to get access to all the features.
- data/src/ChangeLog +13 -0
- data/src/README.ja +0 -9
- data/src/lib/nmatrix.rb +11 -11
- data/src/na_array.c +15 -15
- data/src/na_func.c +2 -2
- data/src/na_linalg.c +14 -8
- data/src/narray.c +5 -3
- data/src/narray.h +2 -2
- data/src/narray_local.h +8 -1
- data/src/test/testmask.rb +3 -3
- data/src/test/testmatrix2.rb +34 -25
- data/src/test/testmatrix3.rb +5 -5
- metadata +2 -2
data/src/ChangeLog
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
2008-11-05 Masahiro TANAKA <masa16.tanaka at gmail.com>
|
2
|
+
|
3
|
+
* work with ruby 1.9.1 preview1
|
4
|
+
- use RARRAY_*** macros instead of struct RArray.
|
5
|
+
- follow changes in Complex feature.
|
6
|
+
- change oprator arg of coerce_rev func : id -> symbol
|
7
|
+
- modify test scripts.
|
8
|
+
|
9
|
+
* na_array.c (na_do_mdai):
|
10
|
+
- bug fix in counting narray's rank.
|
11
|
+
|
12
|
+
* ver 0.5.9p6
|
13
|
+
|
1
14
|
2008-06-10 Masahiro TANAKA <masa16.tanaka at gmail.com>
|
2
15
|
|
3
16
|
* bench/: new sophisticated benchmark script.
|
data/src/README.ja
CHANGED
@@ -51,12 +51,3 @@
|
|
51
51
|
|
52
52
|
$BEDCf>;9((B
|
53
53
|
$B$40U8+!$%P%0%l%]!<%H$=$NB>$O(B masa16.tanaka@gmail.com $B$^$G$*4j$$$7$^$9!#(B
|
54
|
-
|
55
|
-
* $B<U<-(B
|
56
|
-
|
57
|
-
$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
|
58
|
-
|
59
|
-
$B0KF#(B $B>4B'(B $B$5$s(B for MDArray
|
60
|
-
$B3HD%%i%$%V%i%j$N:n$jJ}$d!"(BArray$B$+$iB?<!85G[Ns$KJQ49$9$kItJ,$r(B
|
61
|
-
$B;29M$K$5$;$F$$$?$@$-$^$7$?!#(B
|
62
|
-
|
data/src/lib/nmatrix.rb
CHANGED
@@ -14,7 +14,7 @@ class NMatrix < NArray
|
|
14
14
|
return super(NArray.refer(other))
|
15
15
|
when NArray
|
16
16
|
unless other.instance_of?(NArray)
|
17
|
-
return other.coerce_rev( self,
|
17
|
+
return other.coerce_rev( self, :+ )
|
18
18
|
end
|
19
19
|
end
|
20
20
|
raise TypeError,"Illegal operation: NMatrix + %s" % other.class
|
@@ -26,7 +26,7 @@ class NMatrix < NArray
|
|
26
26
|
return super(NArray.refer(other))
|
27
27
|
when NArray
|
28
28
|
unless other.instance_of?(NArray)
|
29
|
-
return other.coerce_rev( self,
|
29
|
+
return other.coerce_rev( self, :- )
|
30
30
|
end
|
31
31
|
end
|
32
32
|
raise TypeError,"Illegal operation: NMatrix - %s" % other.class
|
@@ -44,7 +44,7 @@ class NMatrix < NArray
|
|
44
44
|
if other.instance_of?(NArray)
|
45
45
|
NMatrix.mul( NArray.refer(self), other.newdim(0,0) )
|
46
46
|
else
|
47
|
-
other.coerce_rev( self,
|
47
|
+
other.coerce_rev( self, :* )
|
48
48
|
end
|
49
49
|
when Numeric
|
50
50
|
super
|
@@ -66,7 +66,7 @@ class NMatrix < NArray
|
|
66
66
|
if other.instance_of?(NArray)
|
67
67
|
NMatrix.div( NArray.refer(self), other.newdim(0,0) )
|
68
68
|
else
|
69
|
-
other.coerce_rev( self,
|
69
|
+
other.coerce_rev( self, :/ )
|
70
70
|
end
|
71
71
|
when Numeric
|
72
72
|
NMatrix.div( NArray.refer(self), other )
|
@@ -97,14 +97,14 @@ class NMatrix < NArray
|
|
97
97
|
|
98
98
|
def coerce_rev(other,id)
|
99
99
|
case id
|
100
|
-
when
|
100
|
+
when :*
|
101
101
|
if other.instance_of?(NArray)
|
102
102
|
return NMatrix.mul( other.newdim(0,0), self )
|
103
103
|
end
|
104
104
|
if other.instance_of?(NArrayScalar)
|
105
105
|
return NMatrix.mul( other.newdim(0), self )
|
106
106
|
end
|
107
|
-
when
|
107
|
+
when :/
|
108
108
|
if other.instance_of?(NArray)
|
109
109
|
return NMatrix.mul( other.newdim(0,0), self.inverse )
|
110
110
|
end
|
@@ -163,7 +163,7 @@ class NVector < NArray
|
|
163
163
|
return super(NArray.refer(other))
|
164
164
|
when NArray
|
165
165
|
unless other.instance_of?(NArray)
|
166
|
-
return other.coerce_rev( self,
|
166
|
+
return other.coerce_rev( self, :+ )
|
167
167
|
end
|
168
168
|
end
|
169
169
|
raise TypeError,"Illegal operation: NVector + %s" % other.class
|
@@ -175,7 +175,7 @@ class NVector < NArray
|
|
175
175
|
return super(NArray.refer(other))
|
176
176
|
when NArray
|
177
177
|
unless other.instance_of?(NArray)
|
178
|
-
return other.coerce_rev( self,
|
178
|
+
return other.coerce_rev( self, :- )
|
179
179
|
end
|
180
180
|
end
|
181
181
|
raise TypeError,"Illegal operation: NVector - %s" % other.class
|
@@ -191,7 +191,7 @@ class NVector < NArray
|
|
191
191
|
if other.instance_of?(NArray)
|
192
192
|
NVector.mul( NArray.refer(self), other.newdim(0) )
|
193
193
|
else
|
194
|
-
other.coerce_rev( self,
|
194
|
+
other.coerce_rev( self, :* )
|
195
195
|
end
|
196
196
|
when Numeric
|
197
197
|
NVector.mul( NArray.refer(self), other )
|
@@ -210,7 +210,7 @@ class NVector < NArray
|
|
210
210
|
if other.instance_of?(NArray)
|
211
211
|
NVector.div( NArray.refer(self), other.newdim(0) )
|
212
212
|
else
|
213
|
-
other.coerce_rev( self,
|
213
|
+
other.coerce_rev( self, :/ )
|
214
214
|
end
|
215
215
|
when Numeric
|
216
216
|
NVector.div( NArray.refer(self), other )
|
@@ -229,7 +229,7 @@ class NVector < NArray
|
|
229
229
|
|
230
230
|
def coerce_rev(other,id)
|
231
231
|
case id
|
232
|
-
when
|
232
|
+
when :*
|
233
233
|
if other.instance_of?(NArray)
|
234
234
|
return NVector.mul( other.newdim(0), self )
|
235
235
|
end
|
data/src/na_array.c
CHANGED
@@ -152,14 +152,14 @@ static int
|
|
152
152
|
{
|
153
153
|
int i, j, len, length, start, dir;
|
154
154
|
VALUE v;
|
155
|
-
|
155
|
+
VALUE ary;
|
156
156
|
|
157
|
-
ary =
|
158
|
-
len = ary
|
157
|
+
ary = mdai->item[rank-1].val;
|
158
|
+
len = RARRAY_LEN(ary);
|
159
159
|
|
160
|
-
for (i=0; i < ary
|
160
|
+
for (i=0; i < RARRAY_LEN(ary); ++i) {
|
161
161
|
|
162
|
-
v = ary
|
162
|
+
v = RARRAY_PTR(ary)[i];
|
163
163
|
|
164
164
|
if (TYPE(v) == T_ARRAY) {
|
165
165
|
/* check recursive array */
|
@@ -196,7 +196,7 @@ static int
|
|
196
196
|
if ( rank+na->rank > mdai->n ) {
|
197
197
|
na_realloc_mdai(mdai,((na->rank-1)/4+1)*4);
|
198
198
|
}
|
199
|
-
for ( j=na->rank, r=rank; --
|
199
|
+
for ( j=na->rank, r=rank; j-- > 0 ; ++r ) {
|
200
200
|
if ( mdai->item[r].shape < na->shape[j] )
|
201
201
|
mdai->item[r].shape = na->shape[j];
|
202
202
|
}
|
@@ -269,15 +269,15 @@ static void
|
|
269
269
|
|
270
270
|
/* copy Array to NArray */
|
271
271
|
static void
|
272
|
-
na_copy_ary_to_nary(
|
272
|
+
na_copy_ary_to_nary( VALUE ary, struct NARRAY *na,
|
273
273
|
int thisrank, int *idx, int type )
|
274
274
|
{
|
275
275
|
int i, j, pos, len, start, step, dir;
|
276
276
|
VALUE v;
|
277
277
|
|
278
278
|
if (thisrank==0) {
|
279
|
-
for (i = idx[0] = 0; i < ary
|
280
|
-
v = ary
|
279
|
+
for (i = idx[0] = 0; i < RARRAY_LEN(ary); ++i) {
|
280
|
+
v = RARRAY_PTR(ary)[i];
|
281
281
|
if (rb_obj_is_kind_of(v, rb_cRange)) {
|
282
282
|
na_range_to_sequence(v,&len,&start,&dir);
|
283
283
|
if (len>0) {
|
@@ -299,10 +299,10 @@ static void
|
|
299
299
|
}
|
300
300
|
else /* thisrank > 0 */
|
301
301
|
{
|
302
|
-
for (i = idx[thisrank] = 0; i < ary
|
303
|
-
v = ary
|
302
|
+
for (i = idx[thisrank] = 0; i < RARRAY_LEN(ary); ++i) {
|
303
|
+
v = RARRAY_PTR(ary)[i];
|
304
304
|
if (TYPE(v) == T_ARRAY) {
|
305
|
-
na_copy_ary_to_nary(
|
305
|
+
na_copy_ary_to_nary(v,na,thisrank-1,idx,type);
|
306
306
|
if (idx[thisrank-1]>0) ++idx[thisrank];
|
307
307
|
}
|
308
308
|
else if (IsNArray(v)) {
|
@@ -325,7 +325,7 @@ static void
|
|
325
325
|
}
|
326
326
|
else {
|
327
327
|
pos = na_index_pos(na,idx);
|
328
|
-
SetFuncs[type][NA_ROBJ]( 1, NA_PTR(na,pos), 0, ary
|
328
|
+
SetFuncs[type][NA_ROBJ]( 1, NA_PTR(na,pos), 0, &(RARRAY_PTR(ary)[i]), 0 );
|
329
329
|
++idx[thisrank];
|
330
330
|
}
|
331
331
|
/* copy here */
|
@@ -346,7 +346,7 @@ static VALUE
|
|
346
346
|
VALUE v;
|
347
347
|
|
348
348
|
/* empty array */
|
349
|
-
if (
|
349
|
+
if (RARRAY_LEN(ary) < 1) {
|
350
350
|
return na_make_empty( type, klass );
|
351
351
|
}
|
352
352
|
|
@@ -380,7 +380,7 @@ static VALUE
|
|
380
380
|
idx = ALLOCA_N(int,rank);
|
381
381
|
for (i=0; i<rank; ++i) idx[i]=0;
|
382
382
|
|
383
|
-
na_copy_ary_to_nary(
|
383
|
+
na_copy_ary_to_nary( ary, na, rank-1, idx, type );
|
384
384
|
|
385
385
|
return v;
|
386
386
|
}
|
data/src/na_func.c
CHANGED
@@ -607,7 +607,7 @@ static VALUE
|
|
607
607
|
|
608
608
|
if (klass==Qnil) { /* coerce_rev */
|
609
609
|
if ((id=na_bifunc_to_id(funcs))!=0)
|
610
|
-
return rb_funcall( obj2, na_id_coerce_rev, 2, obj1,
|
610
|
+
return rb_funcall( obj2, na_id_coerce_rev, 2, obj1, ID2SYM(id) );
|
611
611
|
else
|
612
612
|
klass = cNArray;
|
613
613
|
}
|
@@ -1047,7 +1047,7 @@ static int
|
|
1047
1047
|
r = NUM2INT(v);
|
1048
1048
|
if (r<0) r += rankc; /* negative for from end */
|
1049
1049
|
if (r<0 || r>=rankc)
|
1050
|
-
rb_raise(rb_eArgError, "rank %
|
1050
|
+
rb_raise(rb_eArgError, "rank %ld out of range", r);
|
1051
1051
|
if (flag)
|
1052
1052
|
rankv[c] = r;
|
1053
1053
|
else
|
data/src/na_linalg.c
CHANGED
@@ -266,11 +266,14 @@ static int
|
|
266
266
|
int status, size, n=shape[0];
|
267
267
|
|
268
268
|
if (type==NA_ROBJ) {
|
269
|
+
VALUE *mem;
|
270
|
+
int i;
|
269
271
|
size = n*2+1;
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
272
|
+
mem = ALLOC_N(VALUE, size);
|
273
|
+
for (i=0; i<size; i++) mem[i] = Qnil;
|
274
|
+
val = rb_ary_new4(size, mem);
|
275
|
+
xfree(mem);
|
276
|
+
buf = (char*)((RARRAY_PTR(val)));
|
274
277
|
status = na_lu_fact_func_body( ni, a, idx, shape, type, buf );
|
275
278
|
} else {
|
276
279
|
size = na_sizeof[type]*n + na_sizeof[na_cast_real[type]]*(n+1);
|
@@ -427,11 +430,14 @@ na_lu_solve_func( int ni,
|
|
427
430
|
int size;
|
428
431
|
|
429
432
|
if (type==NA_ROBJ) {
|
433
|
+
VALUE *mem;
|
434
|
+
int i;
|
430
435
|
size = shape[1];
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
436
|
+
mem = ALLOC_N(VALUE, size);
|
437
|
+
for (i=0; i<size; i++) mem[i] = Qnil;
|
438
|
+
val = rb_ary_new4(size, mem);
|
439
|
+
xfree(mem);
|
440
|
+
buf = (char*)((RARRAY_PTR(val)));
|
435
441
|
na_lu_solve_func_body( ni, x, ps1, a, ps2, shape, type, buf );
|
436
442
|
} else {
|
437
443
|
size = shape[1] * na_sizeof[type];
|
data/src/narray.c
CHANGED
@@ -24,6 +24,7 @@ ID na_id_add, na_id_sbt, na_id_mul, na_id_div, na_id_mod;
|
|
24
24
|
ID na_id_real, na_id_imag;
|
25
25
|
ID na_id_coerce_rev;
|
26
26
|
ID na_id_new;
|
27
|
+
ID na_id_Complex;
|
27
28
|
static ID na_id_to_i, na_id_usec, na_id_now;
|
28
29
|
|
29
30
|
const int na_sizeof[NA_NTYPES+1] = {
|
@@ -775,7 +776,7 @@ static VALUE
|
|
775
776
|
struct NARRAY *ary;
|
776
777
|
int i;
|
777
778
|
char buf[256];
|
778
|
-
char *classname;
|
779
|
+
const char *classname;
|
779
780
|
char *ref = "%s(ref).%s(%i";
|
780
781
|
char *org = "%s.%s(%i";
|
781
782
|
|
@@ -1061,7 +1062,7 @@ static VALUE
|
|
1061
1062
|
static VALUE
|
1062
1063
|
na_where(VALUE self)
|
1063
1064
|
{
|
1064
|
-
return
|
1065
|
+
return RARRAY_PTR( na_where2(self) )[0];
|
1065
1066
|
}
|
1066
1067
|
|
1067
1068
|
|
@@ -1271,7 +1272,7 @@ void
|
|
1271
1272
|
na_id_end = rb_intern("end");
|
1272
1273
|
na_id_exclude_end = rb_intern("exclude_end?");
|
1273
1274
|
na_id_real = rb_intern("real");
|
1274
|
-
na_id_imag = rb_intern("
|
1275
|
+
na_id_imag = rb_intern("imag");
|
1275
1276
|
na_id_new = rb_intern("new");
|
1276
1277
|
na_id_to_i = rb_intern("to_i");
|
1277
1278
|
na_id_usec = rb_intern("usec");
|
@@ -1288,6 +1289,7 @@ void
|
|
1288
1289
|
na_id_div = rb_intern("/");
|
1289
1290
|
na_id_mod = rb_intern("%");
|
1290
1291
|
na_id_coerce_rev = rb_intern("coerce_rev");
|
1292
|
+
na_id_Complex = rb_intern("Complex");
|
1291
1293
|
|
1292
1294
|
na_id_class_dim = rb_intern("CLASS_DIMENSION");
|
1293
1295
|
|
data/src/narray.h
CHANGED
data/src/narray_local.h
CHANGED
@@ -92,6 +92,7 @@ extern ID na_id_add, na_id_sbt, na_id_mul, na_id_div, na_id_mod;
|
|
92
92
|
extern ID na_id_real, na_id_imag;
|
93
93
|
extern ID na_id_coerce_rev;
|
94
94
|
extern ID na_id_new;
|
95
|
+
extern ID na_id_Complex;
|
95
96
|
|
96
97
|
extern const int na_upcast[NA_NTYPES][NA_NTYPES];
|
97
98
|
extern const int na_no_cast[NA_NTYPES];
|
@@ -128,7 +129,7 @@ int na_shrink_class(int class_dim, int *shrink);
|
|
128
129
|
VALUE na_shrink_rank(VALUE obj, int class_dim, int *shrink);
|
129
130
|
|
130
131
|
#define rb_complex_new(r,i) \
|
131
|
-
rb_funcall(
|
132
|
+
rb_funcall(rb_mKernel, na_id_Complex, 2, rb_float_new(r), rb_float_new(i))
|
132
133
|
|
133
134
|
|
134
135
|
typedef union {
|
@@ -208,3 +209,9 @@ typedef union {
|
|
208
209
|
#if !defined RSTRING_PTR
|
209
210
|
#define RSTRING_PTR(a) RSTRING(a)->ptr
|
210
211
|
#endif
|
212
|
+
#if !defined RARRAY_LEN
|
213
|
+
#define RARRAY_LEN(a) RARRAY(a)->len
|
214
|
+
#endif
|
215
|
+
#if !defined RARRAY_PTR
|
216
|
+
#define RARRAY_PTR(a) RARRAY(a)->ptr
|
217
|
+
#endif
|
data/src/test/testmask.rb
CHANGED
@@ -2,14 +2,14 @@ require "narray"
|
|
2
2
|
|
3
3
|
a = NArray.byte(10)
|
4
4
|
a[2..4] = 1
|
5
|
-
p a.
|
5
|
+
p a.class, a.count_true, a.count_false
|
6
6
|
|
7
7
|
begin
|
8
8
|
a = NArray.float(10)
|
9
9
|
a[2..4] = 1
|
10
|
-
p a.
|
10
|
+
p a.class, a.count_true, a.count_false
|
11
11
|
rescue
|
12
|
-
print a.
|
12
|
+
print a.class," -- Exception raised as expected. The message was: ", $!,"\n"
|
13
13
|
end
|
14
14
|
|
15
15
|
#-------------------
|
data/src/test/testmatrix2.rb
CHANGED
@@ -1,33 +1,42 @@
|
|
1
1
|
require 'narray'
|
2
|
-
require 'irb/xmp'
|
2
|
+
#require 'irb/xmp'
|
3
3
|
# xmp :: http://www.ruby-lang.org/en/raa-list.rhtml?name=xmp
|
4
|
+
def xp(s)
|
5
|
+
begin
|
6
|
+
puts s+" #=>"
|
7
|
+
p eval(s)
|
8
|
+
rescue
|
9
|
+
puts $!
|
10
|
+
end
|
11
|
+
puts
|
12
|
+
end
|
4
13
|
|
5
|
-
m1 = NMatrix.float(2,2).indgen!
|
6
|
-
m2 = NMatrix[[0,1.2],[1.5,0]]
|
14
|
+
$m1 = NMatrix.float(2,2).indgen!
|
15
|
+
$m2 = NMatrix[[0,1.2],[1.5,0]]
|
7
16
|
|
8
|
-
v1 = NVector[0.5,1.5]
|
9
|
-
v2 = NVector.float(2,2).indgen!
|
17
|
+
$v1 = NVector[0.5,1.5]
|
18
|
+
$v2 = NVector.float(2,2).indgen!
|
10
19
|
|
11
|
-
a = NArray.float(2,2).indgen!
|
20
|
+
$a = NArray.float(2,2).indgen!
|
12
21
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
22
|
+
xp '$m1'
|
23
|
+
xp '$m1.inverse'
|
24
|
+
xp '$m2'
|
25
|
+
xp '$m1*$m2'
|
26
|
+
xp '$m2*$m1'
|
27
|
+
xp '$m1+$m2'
|
28
|
+
xp '3.14*$m1'
|
29
|
+
xp '$m2*1.25'
|
30
|
+
xp '$v1'
|
31
|
+
xp '$v2'
|
32
|
+
xp '1.25*$v1'
|
33
|
+
xp 'NMath.sqrt($v2**2)'
|
34
|
+
xp '$v1*$v2'
|
35
|
+
xp '$m1*$v1'
|
36
|
+
xp '$v2*$m2'
|
37
|
+
xp '$m1.diagonal([98,99])'
|
38
|
+
xp 'NMatrix.float(4,3).unit'
|
30
39
|
|
31
40
|
puts "\n=== following will fail ...\n"
|
32
|
-
|
33
|
-
|
41
|
+
xp '$m1+$v1'
|
42
|
+
xp '$m1+1'
|
data/src/test/testmatrix3.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: narray
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.9.
|
7
|
-
date: 2008-
|
6
|
+
version: 0.5.9.6
|
7
|
+
date: 2008-11-05 00:00:00 +09:00
|
8
8
|
summary: N-dimensional Numerical Array class for Ruby
|
9
9
|
require_paths:
|
10
10
|
- .
|