narray 0.5.9.7 → 0.5.9.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,44 @@
1
+ 2010-09-13 David MacMahon <davidm at astro.berkeley...>
2
+
3
+ * narray.c (na_where2):
4
+ - Convert to NA_BYTE by calling "obj.ne(0)"
5
+ * ver 0.5.9p8
6
+
7
+ 2010-07-12 Masahiro TANAKA <masa16.tanaka at gmail.com>
8
+
9
+ * narray.c (na_s_to_na):
10
+ - improve argument check in NArray.to_na
11
+
12
+ 2010-04-30 Masahiro TANAKA <masa16.tanaka at gmail.com>
13
+
14
+ * narray.c (na_s_to_na):
15
+ - the number of arguments was not checked.
16
+ Thanks to S D for report.
17
+
18
+ 2010-01-16 Masahiro TANAKA <masa16.tanaka at gmail.com>
19
+
20
+ * na_index.c (na_index_analysis):
21
+ - access out-of-bounds "struct slice" array.
22
+ * SPEC.en, SPEC.ja:
23
+ - fix wrong explanation in count_false/true.
24
+ * na_random.c (na_random):
25
+ - modify random method not to change itself.
26
+ * lib/narray_ext.rb:
27
+ - modify randomn! method to replace itself.
28
+ Thank Yusuke ENDOH for report and comments.
29
+
30
+ 2009-06-14 Masahiro TANAKA <masa16.tanaka at gmail.com>
31
+
32
+ * narray.h:
33
+ include sys/stdint.h rather than sys/types.h
34
+ for C99 confomance
35
+ * ver 0.5.9p7
36
+
1
37
  2009-05-20 Masahiro TANAKA <masa16.tanaka at gmail.com>
2
38
 
3
39
  * lib/narray_ext.rb (mean, stddev,rms,rsmdev,covariance):
4
40
  - swith to DFLOAT type if integer array.
5
41
  - thanks to Philip Silva for report.
6
- * ver 0.5.9p7
7
42
 
8
43
  2009-03-11 Masahiro TANAKA <masa16.tanaka at gmail.com>
9
44
 
@@ -1,53 +1,53 @@
1
1
  Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA
2
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
- + NImage (X11$B%$%a!<%8I=<((B) $B%/%i%9ImB0!#(B(nimage/ $B%G%#%l%/%H%j;2>H(B)
16
- + Ruby/PGPLOT ($B%0%i%U%#%C%/%9%i%$%V%i%j!"JLW}(B) $B$K$F(B
17
- XY$B%0%i%U!"%R%9%H%0%i%`!"Ey9b@~!"%$%a!<%8I=<(2DG=!#(B
18
- + $B?tCM7W;;!&2hA|=hM}!&%G!<%?2r@O$J$II}9-$$1~MQ$,2DG=(B($B$H;W$&(B)$B!#(B
19
-
20
- * $BN`;wIJ(B
3
+ * Ruby/NArrayの特徴。
4
+
5
+ + Rubyで、高速な数値計算が可能。
6
+ + 要素には、8,16,32 bit 整数、単精度/倍精度の実数/複素数、
7
+ および Rubyオブジェクトをサポート。
8
+ + 部分配列の取出し、代入も容易。
9
+ 要素位置の指定には、数値、範囲、インデックスの配列が使用可能。
10
+ + +,-,*,/,%,** 算術関数の演算は、要素-対-要素でおこなう。
11
+ + 配列同士の演算・代入は、各次元のサイズが同じであることが必要。
12
+ ただし、サイズが1の次元は、他方の配列のサイズに合わせて
13
+ 「繰り返し」同じ要素が適用される。
14
+ + FFTW (高速フーリエ変換) version 3 は次のモジュールでサポート。
15
+ + NImage (X11イメージ表示) クラス附属。(nimage/ ディレクトリ参照)
16
+ + Ruby/PGPLOT (グラフィックスライブラリ、別悃) にて
17
+ XYグラフ、ヒストグラム、等高線、イメージ表示可能。
18
+ + 数値計算・画像処理・データ解析など幅広い応用が可能(と思う)
19
+
20
+ * 類似品
21
21
 
22
22
  + Python/NumPy, Perl/PDL, Yorick, IDL
23
23
 
24
- * $BIT==J,$JE@(B
24
+ * 不十分な点
25
25
 
26
- + $B%a%=%C%I$,ITB-!#(B
27
- + $B%P%0=P$7$,IT==J,!#(B
28
- + $B%I%-%e%a%s%H$,$J$$!#(B
26
+ + メソッドが不足。
27
+ + バグ出しが不十分。
28
+ + ドキュメントがない。
29
29
 
30
- * $B%$%s%9%H!<%kJ}K!(B
30
+ * インストール方法
31
31
 
32
- Ruby$B$NI8=`E*$J3HD%%i%$%V%i%j$HF1$8$G$9!#%=!<%9$rE83+$7$?%G%#%l%/%H%j$G!"(B
32
+ Rubyの標準的な拡張ライブラリと同じです。ソースを展開したディレクトリで、
33
33
 
34
34
  ruby extconf.rb
35
35
  make
36
36
  make site-install
37
- ($B$^$?$O(B make install)
37
+ (または make install)
38
38
 
39
- $B$H<B9T$7$^$9!#(B
39
+ と実行します。
40
40
 
41
- * $BF0:n3NG'(B
41
+ * 動作確認
42
42
 
43
43
  ruby 1.8.4 (2005-12-24) [i686-linux]
44
44
  gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
45
45
 
46
- * $BG[I[>r7o(B
46
+ * 配布条件
47
47
 
48
- Ruby$B$N%i%$%;%s%9$K=`5r$7$^$9!#(B
48
+ Rubyのライセンスに準拠します。
49
49
 
50
- * $BCx<T(B
50
+ * 著者
51
51
 
52
- $BEDCf>;9((B
53
- $B$40U8+!$%P%0%l%]!<%H$=$NB>$O(B masa16.tanaka@gmail.com $B$^$G$*4j$$$7$^$9!#(B
52
+ 田中昌宏
53
+ ご意見,バグレポートその他は masa16.tanaka@gmail.com までお願いします。
@@ -1,5 +1,5 @@
1
1
 
2
- Ruby/NArray ver 0.5.9p5 (2008-05-28) by Masahiro TANAKA
2
+ Ruby/NArray ver 0.5.9p8 (2010-12-06) by Masahiro TANAKA
3
3
 
4
4
 
5
5
  Class method:
@@ -218,9 +218,9 @@ Byte swap
218
218
 
219
219
  Boolean / mask related
220
220
  self.count_false count # of elements whose value == 0 (only for
221
- byte, sint, and int)
221
+ byte type)
222
222
  self.count_true count # of elements whose value != 0 (only for
223
- byte, sint, and int)
223
+ byte type)
224
224
  self.mask( mask ) same as self[ mask ], but exclusively for masking.
225
225
  Unlike [], a int or sint mask is accepted.
226
226
 
@@ -1,9 +1,9 @@
1
1
 
2
- Ruby/NArray ver 0.5.9p5 (2008-05-28) by Masahiro TANAKA
2
+ Ruby/NArray ver 0.5.9p8 (2010-12-06) by Masahiro TANAKA
3
3
 
4
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
5
+ クラスメソッド:
6
+ NArray.new(typecode, size, ...) 配列を生成する。要素は0で初期化。
7
7
 
8
8
  NArray.byte(size,...) 1 byte unsigned integer
9
9
  NArray.sint(size,...) 2 byte signed integer
@@ -13,88 +13,88 @@
13
13
  NArray.scomplex(size,...) single precision complex
14
14
  NArray.complex(size,...) double precision complex
15
15
  NArray.object(size,...) Ruby object
16
- $B0J>eMWAG$O(B0$B$^$?$O(Bnil$B$G=i4|2=!#(B
16
+ 以上要素は0またはnilで初期化。
17
17
 
18
- NArray.to_na(array) NArray$B$KJQ49(B
18
+ NArray.to_na(array) NArrayに変換
19
19
  NArray.to_na(string,type[,size,..])
20
20
  NArray[...]
21
21
  NArray[1,5,10.0] #=> NArray.float(3):[1.0, 5.0, 10.0]
22
22
  NArray[1..10] #=> NArray.int(10):[1,2,3,4,5,6,7,8,9,10]
23
23
 
24
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
25
+ クラス変数:
26
+ CLASS_DIMENSION データとして扱われる次元。
27
+ NArrayは0。NVectorは1。NMatrixは2。
28
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
29
+ 配列情報参照
30
+ self.dim 次元(インデックスの数)を返す。
31
+ self.rank 次元(インデックスの数)を返す。
32
+ self.shape 次元ごとのサイズを返す。
33
+ self.total 全要素数を返す。
34
34
 
35
- $B%$%s%G%C%/%9;2>H(B
35
+ インデックス参照
36
36
  self[ dim0, dim1, ... ]
37
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:
38
+ -- インデックス引数に指定できるもの: 数値、範囲、配列、true, false
39
+ -- インデックスの順序: FORTRAN
40
+ -- 添字引数が1つの場合、多次元配列はflattenされた1次元配列とみなされる。
41
+ 例: a 3x3 配列のとき、a[3] a[0,1] の要素を指す。
42
+
43
+ a[ 1, 2, -1 ] 要素の取り出し。負数は最後から数える(-1が最後)
44
+ 要素指定の次元は縮約される。
45
+ a[ 0..3, 4..1 ] 範囲取り出し。範囲の最後が最初より前ならば逆順になる。
46
+ a[ [1,4,2] ] インデックス配列。要素が[a[1],a[4],a[2]]のNArrayが返る。
47
+ a[] a.dup と同じ。
48
+ a[ 0, true ] a[0, 0..-1] と同じ。
49
+ a[ 0, false ] aが3次元のとき、a[0,true,true] と同じ。
50
+ 省略された次元すべてにtrueを指定したのと同じ。
51
+ a[ mask ] マスキング. mask は長さが a と等しい byte
52
+ NArray. mask の各要素の値に応じて、a のそれぞ
53
+ れは落される(0の場合)か、保持される(0以外の場合)
54
+ 例:
55
55
  a=NArray.float(2,2).indgen!
56
56
  p a[ a.lt 3 ]
57
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)
58
+ (a.lt 3 byte NArray を返す)
59
+ (同じことは a[ (a.lt 3).where ] でも出来る)
60
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
61
+ -- self.slice(...) self[...] と同じだが、長さが1になった次元を落
62
+ さず(self[]は落す)、もとのランクを保つ。但し、
63
+ 1次元インデックス付けとマスキングは例外([]と同
64
+ )
65
65
 
66
- $B%$%s%G%C%/%9BeF~!#(B-- $B<h=P$7$H$[$\F1$8%k!<%k!#(B
66
+ インデックス代入。-- 取出しとほぼ同じルール。
67
67
 
68
68
  a[ 1, 2, 3 ] = 1
69
69
  a[ 0..3, 1..4, 2..5 ] = 2
70
70
  a[ [1,3,2,4], true ] = 3
71
- a[] = 4 a.fill!(4) $B$HF1$8!#(B
71
+ a[] = 4 a.fill!(4) と同じ。
72
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
73
+ a[0..2] = b[1..5] --> 要素数が異なるのでエラー。
74
+ a[1,2] = b[0..2,1..3] [1,2]を始点として代入。
75
+ a[0..2,0..3] = b[0..2,1] 繰り返し代入。
76
76
  ( a[0,0]=b[0,1],..,a[0,3]=b[0,1] )
77
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
78
+ 値のセット。
79
+ self.indgen!([start[,step]]) startからstepづつ増加した値をセット。
80
+ self.fill!(value) すべての要素にvalueをセット。
81
+ self.random!(max) 0<=x<max の一様なランダム値を生成。
82
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
83
+ self.randomn 平均0、分散1の正規分布のランダム値を生成。
84
84
  (Box-Muller)
85
- NArray.srand([seed]) $BMp?t$N%7!<%I$r@_Dj!#(B
86
- $B>JN,;~$O;~9o$+$i<+F0@8@.!#(B
85
+ NArray.srand([seed]) 乱数のシードを設定。
86
+ 省略時は時刻から自動生成。
87
87
 
88
- $B1i;;(B: $BMWAG$4$H$K$*$3$J$&!#(B
88
+ 演算: 要素ごとにおこなう。
89
89
  a = NArray.float(3,3).indgen
90
90
  b = NArray.float(3,3).fill(10)
91
91
  c = a*b # --> NArray.float(3,3)
92
92
 
93
93
  a = NArray.float(3,1).indgen
94
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
95
+ c = a*b # --> NArray.float(3,3) -- size=1の次元は拡張する。
96
96
 
97
- $B;;=Q1i;;;R(B
97
+ 算術演算子
98
98
  -self
99
99
  self + other
100
100
  self - other
@@ -110,19 +110,19 @@
110
110
  self.div! other
111
111
  self.mod! other
112
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
113
+ self.mul_add(other,dim,...) (self * other).sum(dim,...)とほぼ同じ。
114
+ ただし途中で配列を作らない。
115
115
 
116
- $B%S%C%H1i;;;R(B($B@0?t$N$_2DG=(B)
116
+ ビット演算子(整数のみ可能)
117
117
  ~self
118
118
  self & other
119
119
  self | other
120
120
  self ^ other
121
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)
122
+ 比較
123
+ -- 要素ごとに値を比較し、結果をBYTE型 NArrayを返す。
124
+ true/falseでないことに注意。
125
+ self.eq other ( ver 0.5.4 以降、== 演算子は廃止しました。)
126
126
  self.ne other
127
127
  self.gt other
128
128
  self > other
@@ -133,89 +133,89 @@
133
133
  self.le other
134
134
  self <= other
135
135
 
136
- self.and other $BMWAG$4$H$N>r7oHf3S!#(B
136
+ self.and other 要素ごとの条件比較。
137
137
  self.or other
138
138
  self.xor other
139
139
  self.not other
140
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($BI8K\I8=`JP:9(B)$B!#(B
153
- self.rms(dim,..) $B;XDj$7$?<!85$N(Broot mean square$B!#(B
154
- self.rmsdev(dim,..) $B;XDj$7$?<!85$N(Broot mean square deviation$B!#(B
155
- self.min(dim,..) $B;XDj$7$?<!85$N:G>.!#(B
156
- self.max(dim,..) $B;XDj$7$?<!85$N:GBg!#(B
157
- ($B>JN,;~$OA4$F$N<!85!#(BRange$B;XDj2D!#(B)
158
- self.median(dim) 0..dim$B$N<!85$NCf1{CM!#>JN,;~$O$9$Y$F$N<!85!#(B
159
-
160
- $B%=!<%H(B
161
- self.sort(dim) 0..dim$B$N<!85$G%=!<%H!#>JN,;~$O$9$Y$F$N<!85!#(B
162
- self.sort_index(dim) $B%=!<%H$7$?%$%s%G%C%/%9$rJV$9!#(B
163
- self[self.sort_index] $B$O(B self.sort $B$HF1Ey!#(B
164
-
165
- $BE>CV(B
141
+ self.all? 要素がすべて真ならば真。
142
+ self.any? 要素のどれかが真ならば真。
143
+ self.none? 要素のどれかが真ならば真。
144
+ self.where 要素が真のインデックス配列を返す。
145
+ self.where2 要素が真と偽のインデックス配列を含む(Ruby)配列を返す。
146
+
147
+ 例: idx_t,idx_f = (a>12).where2
148
+
149
+ 統計
150
+ self.sum(dim,..) 指定した次元の和。
151
+ self.mean(dim,..) 指定した次元の平均。
152
+ self.stddev(dim,..) 指定した次元の標準偏差(標本標準偏差)
153
+ self.rms(dim,..) 指定した次元のroot mean square
154
+ self.rmsdev(dim,..) 指定した次元のroot mean square deviation
155
+ self.min(dim,..) 指定した次元の最小。
156
+ self.max(dim,..) 指定した次元の最大。
157
+ (省略時は全ての次元。Range指定可。)
158
+ self.median(dim) 0..dimの次元の中央値。省略時はすべての次元。
159
+
160
+ ソート
161
+ self.sort(dim) 0..dimの次元でソート。省略時はすべての次元。
162
+ self.sort_index(dim) ソートしたインデックスを返す。
163
+ self[self.sort_index] self.sort と同等。
164
+
165
+ 転置
166
166
  self.transpose( dim0, dim1, .. )
167
- $BG[Ns$NE>CV!#(Bself$B$NBh(B(dim0)$B<!85$,?7$7$$G[Ns$NBh(B0$B<!85$K$J$k!#(B
168
- $BIi?t$O8e$+$i$N=gHV!#(B
169
- transpose(-1,1..-2,0) $B$G:G=i$H:G8e$rF~$l49$(!#(B
167
+ 配列の転置。selfの第(dim0)次元が新しい配列の第0次元になる。
168
+ 負数は後からの順番。
169
+ transpose(-1,1..-2,0) で最初と最後を入れ換え。
170
170
 
171
- $B%$%s%G%C%/%9$NJQ99(B ($BMWAG?t$OITJQ(B)
171
+ インデックスの変更 (要素数は不変)
172
172
  self.reshape!(size,...)
173
173
  self.shape= size,...
174
- self.newdim!(dim,...) $B;XDj0LCV$K%5%$%:(B1$B$N<!85$rA^F~$9$k!#(B
175
-
176
- $B%G!<%?$N;2>H(B
177
- self.refer self$B$N%G!<%?$r;2>H$9$kJL$N%*%V%8%'%/%H$r:n@.!#(B
178
- self.reshape(size,...) self.refer.reshape! $B$HF1MM!#(B
179
- self.newdim(dim,...) self.refer.newdim! $B$HF1MM!#(B
180
-
181
- $B7?JQ49(B
182
- self.floor self$B$h$j>.$5$$:GBg$N@0?t$rJV$9!#(B
183
- self.ceil self$B$h$jBg$-$$:G>.$N@0?t$rJV$9!#(B
184
- self.round self$B$K$b$C$H$b6a$$@0?t$rJV$9!#(B
185
- self.to_f $BCM$rIbF0>.?tE@?t$KJQ49$9$k!#(B
186
- self.to_i $BCM$r@0?t$KJQ49$9$k!#(B
187
- self.to_a $BCM$r(BRuby$B$NG[Ns$KJQ49$9$k!#(B
188
- self.to_s $B%P%$%J%j%G!<%?$r$=$N$^$^(BRuby$B$NJ8;zNs%G!<%?$KJQ49$9$k!#(B
189
- self.to_string $B3FMWAG$rJ8;zNs$KJQ49$9$k!#(B
190
-
191
- $B%$%F%l!<%?(B
174
+ self.newdim!(dim,...) 指定位置にサイズ1の次元を挿入する。
175
+
176
+ データの参照
177
+ self.refer selfのデータを参照する別のオブジェクトを作成。
178
+ self.reshape(size,...) self.refer.reshape! と同様。
179
+ self.newdim(dim,...) self.refer.newdim! と同様。
180
+
181
+ 型変換
182
+ self.floor selfより小さい最大の整数を返す。
183
+ self.ceil selfより大きい最小の整数を返す。
184
+ self.round selfにもっとも近い整数を返す。
185
+ self.to_f 値を浮動小数点数に変換する。
186
+ self.to_i 値を整数に変換する。
187
+ self.to_a 値をRubyの配列に変換する。
188
+ self.to_s バイナリデータをそのままRubyの文字列データに変換する。
189
+ self.to_string 各要素を文字列に変換する。
190
+
191
+ イテレータ
192
192
  self.each {|i| ...}
193
193
  self.collect {|i| ...}
194
194
  self.collect! {|i| ...}
195
195
 
196
- $B%P%$%H%9%o%C%W(B
197
- self.swap_byte $B%P%$%H%9%o%C%W(B
198
- self.hton $B%M%C%H%o!<%/%P%$%H%*!<%@!<$KJQ49(B
196
+ バイトスワップ
197
+ self.swap_byte バイトスワップ
198
+ self.hton ネットワークバイトオーダーに変換
199
199
  self.ntoh
200
- self.htov VAX$B%P%$%H%*!<%@!<$KJQ49(B
200
+ self.htov VAXバイトオーダーに変換
201
201
  self.vtoh
202
202
 
203
- Boolean / $B%^%9%/4X78(B
204
- self.count_false $BCM(B == 0 $B$NMWAG?t(B (byte, sint, int $B$N$_(B)
205
- self.count_true $BCM(B == 1 $B$NMWAG?t(B (byte, sint, int $B$N$_(B)
206
- self.mask( mask ) self[ mask ] $B$HF1$8$@$+%^%9%-%s%0@lMQ(B.
207
- [] $B$H0c$$(B int, sint $B$N%^%9%/$b;H$($k(B.
203
+ Boolean / マスク関係
204
+ self.count_false == 0 の要素数 (byte型のみ)
205
+ self.count_true == 1 の要素数 (byte型のみ)
206
+ self.mask( mask ) self[ mask ] と同じだかマスキング専用.
207
+ [] と違い int, sint のマスクも使える.
208
208
 
209
- $BJ#AG?t(B
209
+ 複素数
210
210
  self.real
211
211
  self.imag
212
212
  self.conj
213
213
  self.conj!
214
214
  self.angle atan2(self.imag, self.real)
215
- self.imag= other $B5u?tItJ,$K(Bother$B$r%;%C%H!#(B
216
- self.im $B5u?tG\!#(B
215
+ self.imag= other 虚数部分にotherをセット。
216
+ self.im 虚数倍。
217
217
 
218
- NMath $B%b%8%e!<%k(B
218
+ NMath モジュール
219
219
  sqrt(x)
220
220
  exp(x)
221
221
  log(x)
@@ -233,55 +233,55 @@ NMath $B%b%8%e!<%k(B
233
233
  covariance
234
234
 
235
235
 
236
- 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)
237
- ($BJL%b%8%e!<%k(B)
236
+ FFTW モジュール (fftw-2.1.3をshared libでコンパイルしたもので確認)
237
+ (別モジュール)
238
238
  fftw(x,[1|-1])
239
- convol(a,b) FFTW$B$rMQ$$$?>v$_9~$_!#(B
239
+ convol(a,b) FFTWを用いた畳み込み。
240
240
 
241
241
 
242
242
  NMatrix
243
243
 
244
- NArray$B$N%5%V%/%i%9!#:G=i$N(B2$B<!85$r(BMatrix$B$H$7$FMQ$$$k!#(B
245
- $B;D$j$N<!85$OB?<!85G[Ns$H$7$F07$o$l$k!#(B
246
- $B<!85$N=g=x$O!"?t3X$G$NI=5-$H$O5U(B: a_ij => a[j,i]
244
+ NArrayのサブクラス。最初の2次元をMatrixとして用いる。
245
+ 残りの次元は多次元配列として扱われる。
246
+ 次元の順序は、数学での表記とは逆: a_ij => a[j,i]
247
247
 
248
- $B%a%=%C%I(B:
249
- +,- $BAj<j$,(B NMatrix $B$N$H$-$K1i;;2D!#(B
250
- * $BAj<j$,(B NMatrix $B$^$?$O(B NVector $B$N$H$-$O(B Matrix$B@Q!#(B
251
- $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(B Scalar$B@Q!#(B
252
- $BNc(B: NMatrix[[1,2],[3,4]] * [1,10]
248
+ メソッド:
249
+ +,- 相手が NMatrix のときに演算可。
250
+ * 相手が NMatrix または NVector のときは Matrix積。
251
+ 相手が Numeric または NArray のときは Scalar積。
252
+ 例: NMatrix[[1,2],[3,4]] * [1,10]
253
253
  == NMatrix[ [[1,2],[3,4]], [[10,20],[30,40]] ]
254
- / $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(BScalar$B=|;;!#(B
255
- $BAj<j$,(B square NMatrix $B$N$H$-$O(BLU$B$K$h$j@~7AJ}Dx<0$r2r$/!#(B
254
+ / 相手が Numeric または NArray のときはScalar除算。
255
+ 相手が square NMatrix のときはLUにより線形方程式を解く。
256
256
  a/b == b.lu.solve(a)
257
257
 
258
- transpose $B0z?t$r>JN,$7$?>l9g$O!":G=i$N(BMatrix$B<!85$r8r49!#(B
258
+ transpose 引数を省略した場合は、最初のMatrix次元を交換。
259
259
  diagonal(other)
260
- diagonal!(other) $BBP3QMWAG$KCM$r%;%C%H!#0z?t>JN,;~$O(B1$B$r%;%C%H!#(B
261
- I $BBP3QMWAG$KCM$K(B1$B$r%;%C%H!#(B
262
- inverse $B5U9TNs(B
263
- lu LU$BJ,2r$r7W;;!#(BNMatrixLU $B%/%i%9$N%$%s%9%?%s%9$rJV$9!#(B
260
+ diagonal!(other) 対角要素に値をセット。引数省略時は1をセット。
261
+ I 対角要素に値に1をセット。
262
+ inverse 逆行列
263
+ lu LU分解を計算。NMatrixLU クラスのインスタンスを返す。
264
264
 
265
265
 
266
266
  NVector
267
267
 
268
- NArray$B$N%5%V%/%i%9!#:G=i$N(B1$B<!85$r(BVector$B$H$7$FMQ$$$k!#(B
269
- $B;D$j$N<!85$OB?<!85G[Ns$H$7$F07$o$l$k!#(B
268
+ NArrayのサブクラス。最初の1次元をVectorとして用いる。
269
+ 残りの次元は多次元配列として扱われる。
270
270
 
271
- $B%a%=%C%I(B:
272
- +,- $BAj<j$,(B NVector $B$N$H$-$K1i;;2D!#(B
273
- * $BAj<j$,(B NMatrix $B$N$H$-$O(B Matrix$B@Q!#(B
274
- $BAj<j$,(B NVector $B$N$H$-$O(B $BFb@Q!#(B
275
- $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(B Scalar$B@Q!#(B
276
- / $BAj<j$,(B Numeric $B$^$?$O(B NArray $B$N$H$-$O(B Scalar$B=|;;!#(B
277
- $BAj<j$,(B square NMatrix $B$N$H$-$O(BLU$B$K$h$j@~7AJ}Dx<0$r2r$/!#(B
271
+ メソッド:
272
+ +,- 相手が NVector のときに演算可。
273
+ * 相手が NMatrix のときは Matrix積。
274
+ 相手が NVector のときは 内積。
275
+ 相手が Numeric または NArray のときは Scalar積。
276
+ / 相手が Numeric または NArray のときは Scalar除算。
277
+ 相手が square NMatrix のときはLUにより線形方程式を解く。
278
278
  v/m == m.lu.solve(v)
279
279
 
280
280
  NMatrixLU
281
281
 
282
- NMatrix#lu $B%a%=%C%I$K$h$j:n$i$l$k!#(B
283
- LU (NMatrix) $B$H(B pivot (NVector) $B$r4^$`!#(B
282
+ NMatrix#lu メソッドにより作られる。
283
+ LU (NMatrix) pivot (NVector) を含む。
284
284
 
285
- $B%a%=%C%I(B:
286
- solve(other) LU$BJ,2r$N7k2L$r;H$C$F(B other $B$r2r$/!#(B
287
- other $B$O(B NMatrix $B$^$?$O(B NVector $B$N%$%s%9%?%s%9!#(B
285
+ メソッド:
286
+ solve(other) LU分解の結果を使って other を解く。
287
+ other NMatrix または NVector のインスタンス。
@@ -83,16 +83,20 @@ na_math
83
83
  na_linalg
84
84
  )
85
85
 
86
- if have_header("sys/types.h")
86
+ header = "stdint.h"
87
+ unless have_header(header)
87
88
  header = "sys/types.h"
88
- else
89
- header = nil
89
+ unless have_header(header)
90
+ header = nil
91
+ end
90
92
  end
91
93
 
92
94
  have_type("u_int8_t", header)
95
+ have_type("uint8_t", header)
93
96
  have_type("int16_t", header)
94
97
  have_type("int32_t", header)
95
98
  have_type("u_int32_t", header)
99
+ have_type("uint32_t", header)
96
100
  #have_library("m")
97
101
  #have_func("sincos")
98
102
  #have_func("asinh")
@@ -160,7 +160,12 @@ class NArray
160
160
  self.class.refer(rr)
161
161
  end
162
162
  end
163
- alias randomn! randomn
163
+ #alias randomn! randomn
164
+
165
+ def randomn!
166
+ self[]= random
167
+ self
168
+ end
164
169
 
165
170
  #SFloatOne = NArray.sfloat(1).fill!(1)
166
171
  end
@@ -230,9 +230,11 @@ static int
230
230
  }
231
231
  multi_ellip = 1;
232
232
  } else {
233
- size = na_index_test( idx[i], ary->shape[j], &sl[j] );
234
- if (size != 1)
235
- total *= size;
233
+ if (j < ary->rank) {
234
+ size = na_index_test( idx[i], ary->shape[j], &sl[j] );
235
+ if (size != 1)
236
+ total *= size;
237
+ }
236
238
  ++j;
237
239
  }
238
240
  }
@@ -370,8 +370,9 @@ static void RndC(int n, char *p1, int i1, double rmax)
370
370
  na_func_t RndFuncs =
371
371
  { TpErr, RndB, RndI, RndL, RndF, RndD, RndX, RndC, TpErr };
372
372
 
373
+
373
374
  static VALUE
374
- na_random(int argc, VALUE *argv, VALUE self)
375
+ na_random_bang(int argc, VALUE *argv, VALUE self)
375
376
  {
376
377
  VALUE vmax;
377
378
  struct NARRAY *ary;
@@ -397,10 +398,16 @@ static VALUE
397
398
  return self;
398
399
  }
399
400
 
401
+ static VALUE
402
+ na_random(int argc, VALUE *argv, VALUE self)
403
+ {
404
+ return na_random_bang(argc, argv, na_clone(self));
405
+ }
406
+
400
407
  void
401
408
  Init_na_random()
402
409
  {
403
410
  rb_define_singleton_method(cNArray,"srand",na_s_srand,-1);
404
- rb_define_method(cNArray, "random!", na_random,-1);
405
- rb_define_alias(cNArray, "random","random!");
411
+ rb_define_method(cNArray, "random!", na_random_bang,-1);
412
+ rb_define_method(cNArray, "random", na_random,-1);
406
413
  }
@@ -18,7 +18,7 @@ VALUE cNArray, cNArrayScalar, cComplex;
18
18
 
19
19
  ID na_id_beg, na_id_end, na_id_exclude_end;
20
20
  ID na_id_minus, na_id_abs, na_id_power;
21
- ID na_id_compare, na_id_and, na_id_or;
21
+ ID na_id_compare, na_id_ne, na_id_and, na_id_or;
22
22
  ID na_id_class_dim;
23
23
  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;
@@ -722,7 +722,7 @@ static VALUE
722
722
 
723
723
  /* singleton method:
724
724
  NArray.to_na( string, type, size1,size2,...,sizeN )
725
- NArray.to_na( object )
725
+ NArray.to_na( array )
726
726
  */
727
727
  static VALUE
728
728
  na_s_to_na(int argc, VALUE *argv, VALUE klass)
@@ -731,19 +731,23 @@ static VALUE
731
731
  VALUE v;
732
732
  struct NARRAY *ary;
733
733
 
734
- switch(TYPE(argv[0])) {
735
- case T_STRING:
734
+ if (argc < 1) {
735
+ rb_raise(rb_eArgError, "Argument is required");
736
+ }
737
+ if (TYPE(argv[0]) == T_STRING) {
736
738
  return na_str_to_na(argc-1,argv+1,argv[0]);
737
- case T_ARRAY:
738
- if (argc>1)
739
- rb_raise(rb_eArgError,"extra arguments");
739
+ }
740
+ if (argc > 1) {
741
+ rb_raise(rb_eArgError, "Only one array argument must be provided");
742
+ }
743
+ if (TYPE(argv[0]) == T_ARRAY) {
740
744
  return na_ary_to_nary( argv[0], klass );
741
- default:
742
- v = na_make_object(na_object_type(argv[0]),1,&shape,klass);
743
- GetNArray(v,ary);
744
- SetFuncs[ary->type][NA_ROBJ](1, ary->ptr,0, argv,0);
745
- return v;
746
745
  }
746
+ if (NA_IsNArray(argv[0])) {
747
+ return argv[0];
748
+ }
749
+ rb_raise(rb_eTypeError, "Argument must be Array or String (or NArray)");
750
+ return Qnil;
747
751
  }
748
752
 
749
753
 
@@ -1024,8 +1028,12 @@ static VALUE
1024
1028
  int32_t *idx1, *idx0;
1025
1029
  struct NARRAY *ary, *a1, *a0; /* a1=true, a0=false */
1026
1030
 
1027
- obj = na_cast_object(obj,NA_BYTE);
1028
1031
  GetNArray(obj,ary);
1032
+ /* Convert to NA_BYTE by calling "obj.ne(0)", if needed */
1033
+ if(ary->type != NA_BYTE) {
1034
+ obj = rb_funcall(obj, na_id_ne, 1, INT2FIX(0));
1035
+ GetNArray(obj,ary);
1036
+ }
1029
1037
  n = ary->total;
1030
1038
 
1031
1039
  /* Count true */
@@ -1278,6 +1286,7 @@ void
1278
1286
  na_id_usec = rb_intern("usec");
1279
1287
  na_id_now = rb_intern("now");
1280
1288
  na_id_compare = rb_intern("<=>");
1289
+ na_id_ne = rb_intern("ne");
1281
1290
  na_id_and = rb_intern("&&");
1282
1291
  na_id_or = rb_intern("||");
1283
1292
  na_id_minus = rb_intern("-@");
@@ -15,19 +15,30 @@
15
15
 
16
16
  #include "narray_config.h"
17
17
 
18
+ #ifdef HAVE_STDINT_H
19
+ # include <stdint.h>
20
+ #endif
21
+
18
22
  #ifdef HAVE_SYS_TYPES_H
19
23
  # include <sys/types.h>
20
24
  #endif
21
25
 
22
- #define NARRAY_VERSION "0.5.9p6"
23
- #define NARRAY_VERSION_CODE 596
26
+ #define NARRAY_VERSION "0.5.9p8"
27
+ #define NARRAY_VERSION_CODE 598
24
28
 
25
29
  /*
26
30
  Data types used in NArray :
27
31
  Please modify these types if your system has any different type.
28
32
  */
33
+
34
+
35
+ /* NA_BYTE : unsigned 8-bit integer */
29
36
  #ifndef HAVE_U_INT8_T
30
- typedef unsigned char u_int8_t; /* NA_BYTE */
37
+ # ifdef HAVE_UINT8_T
38
+ typedef uint8_t u_int8_t;
39
+ # else
40
+ typedef unsigned char u_int8_t;
41
+ # endif
31
42
  #endif
32
43
 
33
44
  #ifndef HAVE_INT16_T
@@ -50,14 +61,19 @@ typedef int int32_t; /* NA_LINT */
50
61
  # endif
51
62
  #endif /* HAVE_INT32_T */
52
63
 
64
+ /* unsigned 32-bit integer */
53
65
  #ifndef HAVE_U_INT32_T
54
- # if SIZEOF_LONG == 4
55
- typedef unsigned long u_int32_t; /* NA_LINT */
66
+ # ifdef HAVE_UINT32_T
67
+ typedef uint32_t u_int32_t;
56
68
  # else
57
- # if SIZEOF_INT == 4
58
- typedef unsigned int u_int32_t; /* NA_LINT */
69
+ # if SIZEOF_LONG == 4
70
+ typedef unsigned long u_int32_t;
59
71
  # else
72
+ # if SIZEOF_INT == 4
73
+ typedef unsigned int u_int32_t;
74
+ # else
60
75
  ---->> Please define u_int32_t manually because sizeof(long) != 4. <<----
76
+ # endif
61
77
  # endif
62
78
  # endif
63
79
  #endif /* HAVE_U_INT32_T */
metadata CHANGED
@@ -1,33 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: narray
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.5.9.7
7
- date: 2009-06-14 00:00:00 +09:00
8
- summary: N-dimensional Numerical Array class for Ruby
9
- require_paths:
10
- - .
11
- email: masa16.tanaka@gmail.com
12
- homepage: http://narray.rubyforge.org/
13
- rubyforge_project: narray
14
- description:
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: false
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.5.9.8
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Masahiro Tanaka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-12-06 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: masa16.tanaka@gmail.com
18
+ executables: []
19
+
20
+ extensions:
21
+ - src/extconf.rb
22
+ extra_rdoc_files: []
23
+
31
24
  files:
32
25
  - src/ChangeLog
33
26
  - src/MANIFEST
@@ -82,17 +75,33 @@ files:
82
75
  - src/bench/dummy.m
83
76
  - src/bench/dummy.py
84
77
  - src/bench/dummy.rb
85
- test_files: []
78
+ has_rdoc: true
79
+ homepage: http://narray.rubyforge.org/
80
+ licenses: []
86
81
 
82
+ post_install_message:
87
83
  rdoc_options: []
88
84
 
89
- extra_rdoc_files: []
90
-
91
- executables: []
92
-
93
- extensions:
94
- - src/extconf.rb
85
+ require_paths:
86
+ - .
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
92
+ version:
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: "0"
98
+ version:
95
99
  requirements: []
96
100
 
97
- dependencies: []
101
+ rubyforge_project: narray
102
+ rubygems_version: 1.3.5
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: N-dimensional Numerical Array class for Ruby
106
+ test_files: []
98
107