narray 0.5.9.7 → 0.5.9.8

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.
@@ -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