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.
- data/src/ChangeLog +36 -1
- data/src/README.ja +32 -32
- data/src/SPEC.en +3 -3
- data/src/SPEC.ja +152 -152
- data/src/extconf.rb +7 -3
- data/src/lib/narray_ext.rb +6 -1
- data/src/na_index.c +5 -3
- data/src/na_random.c +10 -3
- data/src/narray.c +22 -13
- data/src/narray.h +23 -7
- metadata +41 -32
data/src/ChangeLog
CHANGED
@@ -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
|
|
data/src/README.ja
CHANGED
@@ -1,53 +1,53 @@
|
|
1
1
|
Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA
|
2
2
|
|
3
|
-
* Ruby/NArray
|
4
|
-
|
5
|
-
+ Ruby
|
6
|
-
+
|
7
|
-
|
8
|
-
+
|
9
|
-
|
10
|
-
+ +,-,*,/,%,**
|
11
|
-
+
|
12
|
-
|
13
|
-
|
14
|
-
+ FFTW (
|
15
|
-
+ NImage (X11
|
16
|
-
+ Ruby/PGPLOT (
|
17
|
-
XY
|
18
|
-
+
|
19
|
-
|
20
|
-
*
|
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
|
-
*
|
24
|
+
* 不十分な点
|
25
25
|
|
26
|
-
+
|
27
|
-
+
|
28
|
-
+
|
26
|
+
+ メソッドが不足。
|
27
|
+
+ バグ出しが不十分。
|
28
|
+
+ ドキュメントがない。
|
29
29
|
|
30
|
-
*
|
30
|
+
* インストール方法
|
31
31
|
|
32
|
-
Ruby
|
32
|
+
Rubyの標準的な拡張ライブラリと同じです。ソースを展開したディレクトリで、
|
33
33
|
|
34
34
|
ruby extconf.rb
|
35
35
|
make
|
36
36
|
make site-install
|
37
|
-
(
|
37
|
+
(または make install)
|
38
38
|
|
39
|
-
|
39
|
+
と実行します。
|
40
40
|
|
41
|
-
*
|
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
|
-
*
|
46
|
+
* 配布条件
|
47
47
|
|
48
|
-
Ruby
|
48
|
+
Rubyのライセンスに準拠します。
|
49
49
|
|
50
|
-
*
|
50
|
+
* 著者
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
田中昌宏
|
53
|
+
ご意見,バグレポートその他は masa16.tanaka@gmail.com までお願いします。
|
data/src/SPEC.en
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
Ruby/NArray ver 0.5.
|
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
|
221
|
+
byte type)
|
222
222
|
self.count_true count # of elements whose value != 0 (only for
|
223
|
-
byte
|
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
|
|
data/src/SPEC.ja
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
|
2
|
-
Ruby/NArray ver 0.5.
|
2
|
+
Ruby/NArray ver 0.5.9p8 (2010-12-06) by Masahiro TANAKA
|
3
3
|
|
4
4
|
|
5
|
-
|
6
|
-
NArray.new(typecode, size, ...)
|
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
|
-
|
16
|
+
以上要素は0またはnilで初期化。
|
17
17
|
|
18
|
-
NArray.to_na(array) NArray
|
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
|
-
|
26
|
-
CLASS_DIMENSION
|
27
|
-
NArray
|
25
|
+
クラス変数:
|
26
|
+
CLASS_DIMENSION データとして扱われる次元。
|
27
|
+
NArrayは0。NVectorは1。NMatrixは2。
|
28
28
|
|
29
|
-
|
30
|
-
self.dim
|
31
|
-
self.rank
|
32
|
-
self.shape
|
33
|
-
self.total
|
29
|
+
配列情報参照
|
30
|
+
self.dim 次元(インデックスの数)を返す。
|
31
|
+
self.rank 次元(インデックスの数)を返す。
|
32
|
+
self.shape 次元ごとのサイズを返す。
|
33
|
+
self.total 全要素数を返す。
|
34
34
|
|
35
|
-
|
35
|
+
インデックス参照
|
36
36
|
self[ dim0, dim1, ... ]
|
37
37
|
|
38
|
-
--
|
39
|
-
--
|
40
|
-
--
|
41
|
-
|
42
|
-
|
43
|
-
a[ 1, 2, -1 ]
|
44
|
-
|
45
|
-
a[ 0..3, 4..1 ]
|
46
|
-
a[ [1,4,2] ]
|
47
|
-
a[] a.dup
|
48
|
-
a[ 0, true ] a[0, 0..-1]
|
49
|
-
a[ 0, false ] a
|
50
|
-
|
51
|
-
a[ mask ]
|
52
|
-
NArray. mask
|
53
|
-
|
54
|
-
|
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
|
59
|
-
(
|
58
|
+
(a.lt 3 は byte 型 NArray を返す)
|
59
|
+
(同じことは a[ (a.lt 3).where ] でも出来る)
|
60
60
|
|
61
|
-
-- self.slice(...) self[...]
|
62
|
-
|
63
|
-
1
|
64
|
-
|
61
|
+
-- self.slice(...) self[...] と同じだが、長さが1になった次元を落
|
62
|
+
さず(self[]は落す)、もとのランクを保つ。但し、
|
63
|
+
1次元インデックス付けとマスキングは例外([]と同
|
64
|
+
じ)。
|
65
65
|
|
66
|
-
|
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)
|
71
|
+
a[] = 4 a.fill!(4) と同じ。
|
72
72
|
|
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]
|
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
|
-
|
79
|
-
self.indgen!([start[,step]]) start
|
80
|
-
self.fill!(value)
|
81
|
-
self.random!(max) 0<=x<max
|
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
|
83
|
+
self.randomn 平均0、分散1の正規分布のランダム値を生成。
|
84
84
|
(Box-Muller)
|
85
|
-
NArray.srand([seed])
|
86
|
-
|
85
|
+
NArray.srand([seed]) 乱数のシードを設定。
|
86
|
+
省略時は時刻から自動生成。
|
87
87
|
|
88
|
-
|
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
|
95
|
+
c = a*b # --> NArray.float(3,3) -- size=1の次元は拡張する。
|
96
96
|
|
97
|
-
|
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,...)
|
114
|
-
|
113
|
+
self.mul_add(other,dim,...) (self * other).sum(dim,...)とほぼ同じ。
|
114
|
+
ただし途中で配列を作らない。
|
115
115
|
|
116
|
-
|
116
|
+
ビット演算子(整数のみ可能)
|
117
117
|
~self
|
118
118
|
self & other
|
119
119
|
self | other
|
120
120
|
self ^ other
|
121
121
|
|
122
|
-
|
123
|
-
--
|
124
|
-
true/false
|
125
|
-
self.eq other ( ver 0.5.4
|
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
|
136
|
+
self.and other 要素ごとの条件比較。
|
137
137
|
self.or other
|
138
138
|
self.xor other
|
139
139
|
self.not other
|
140
140
|
|
141
|
-
self.all?
|
142
|
-
self.any?
|
143
|
-
self.none?
|
144
|
-
self.where
|
145
|
-
self.where2
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
self.sum(dim,..)
|
151
|
-
self.mean(dim,..)
|
152
|
-
self.stddev(dim,..)
|
153
|
-
self.rms(dim,..)
|
154
|
-
self.rmsdev(dim,..)
|
155
|
-
self.min(dim,..)
|
156
|
-
self.max(dim,..)
|
157
|
-
(
|
158
|
-
self.median(dim) 0..dim
|
159
|
-
|
160
|
-
|
161
|
-
self.sort(dim) 0..dim
|
162
|
-
self.sort_index(dim)
|
163
|
-
self[self.sort_index]
|
164
|
-
|
165
|
-
|
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
|
-
|
168
|
-
|
169
|
-
transpose(-1,1..-2,0)
|
167
|
+
配列の転置。selfの第(dim0)次元が新しい配列の第0次元になる。
|
168
|
+
負数は後からの順番。
|
169
|
+
transpose(-1,1..-2,0) で最初と最後を入れ換え。
|
170
170
|
|
171
|
-
|
171
|
+
インデックスの変更 (要素数は不変)
|
172
172
|
self.reshape!(size,...)
|
173
173
|
self.shape= size,...
|
174
|
-
self.newdim!(dim,...)
|
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
|
188
|
-
self.to_s
|
189
|
-
self.to_string
|
190
|
-
|
191
|
-
|
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
|
-
|
197
|
-
self.swap_byte
|
198
|
-
self.hton
|
196
|
+
バイトスワップ
|
197
|
+
self.swap_byte バイトスワップ
|
198
|
+
self.hton ネットワークバイトオーダーに変換
|
199
199
|
self.ntoh
|
200
|
-
self.htov VAX
|
200
|
+
self.htov VAXバイトオーダーに変換
|
201
201
|
self.vtoh
|
202
202
|
|
203
|
-
Boolean /
|
204
|
-
self.count_false
|
205
|
-
self.count_true
|
206
|
-
self.mask( mask ) self[ mask ]
|
207
|
-
[]
|
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
|
-
|
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
|
216
|
-
self.im
|
215
|
+
self.imag= other 虚数部分にotherをセット。
|
216
|
+
self.im 虚数倍。
|
217
217
|
|
218
|
-
NMath
|
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
|
237
|
-
(
|
236
|
+
FFTW モジュール (fftw-2.1.3をshared libでコンパイルしたもので確認)
|
237
|
+
(別モジュール)
|
238
238
|
fftw(x,[1|-1])
|
239
|
-
convol(a,b) FFTW
|
239
|
+
convol(a,b) FFTWを用いた畳み込み。
|
240
240
|
|
241
241
|
|
242
242
|
NMatrix
|
243
243
|
|
244
|
-
NArray
|
245
|
-
|
246
|
-
|
244
|
+
NArrayのサブクラス。最初の2次元をMatrixとして用いる。
|
245
|
+
残りの次元は多次元配列として扱われる。
|
246
|
+
次元の順序は、数学での表記とは逆: a_ij => a[j,i]
|
247
247
|
|
248
|
-
|
249
|
-
+,-
|
250
|
-
*
|
251
|
-
|
252
|
-
|
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
|
-
/
|
255
|
-
|
254
|
+
/ 相手が Numeric または NArray のときはScalar除算。
|
255
|
+
相手が square NMatrix のときはLUにより線形方程式を解く。
|
256
256
|
a/b == b.lu.solve(a)
|
257
257
|
|
258
|
-
transpose
|
258
|
+
transpose 引数を省略した場合は、最初のMatrix次元を交換。
|
259
259
|
diagonal(other)
|
260
|
-
diagonal!(other)
|
261
|
-
I
|
262
|
-
inverse
|
263
|
-
lu LU
|
260
|
+
diagonal!(other) 対角要素に値をセット。引数省略時は1をセット。
|
261
|
+
I 対角要素に値に1をセット。
|
262
|
+
inverse 逆行列
|
263
|
+
lu LU分解を計算。NMatrixLU クラスのインスタンスを返す。
|
264
264
|
|
265
265
|
|
266
266
|
NVector
|
267
267
|
|
268
|
-
NArray
|
269
|
-
|
268
|
+
NArrayのサブクラス。最初の1次元をVectorとして用いる。
|
269
|
+
残りの次元は多次元配列として扱われる。
|
270
270
|
|
271
|
-
|
272
|
-
+,-
|
273
|
-
*
|
274
|
-
|
275
|
-
|
276
|
-
/
|
277
|
-
|
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
|
283
|
-
LU (NMatrix)
|
282
|
+
NMatrix#lu メソッドにより作られる。
|
283
|
+
LU (NMatrix) と pivot (NVector) を含む。
|
284
284
|
|
285
|
-
|
286
|
-
solve(other) LU
|
287
|
-
other
|
285
|
+
メソッド:
|
286
|
+
solve(other) LU分解の結果を使って other を解く。
|
287
|
+
other は NMatrix または NVector のインスタンス。
|
data/src/extconf.rb
CHANGED
@@ -83,16 +83,20 @@ na_math
|
|
83
83
|
na_linalg
|
84
84
|
)
|
85
85
|
|
86
|
-
|
86
|
+
header = "stdint.h"
|
87
|
+
unless have_header(header)
|
87
88
|
header = "sys/types.h"
|
88
|
-
|
89
|
-
|
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")
|
data/src/lib/narray_ext.rb
CHANGED
data/src/na_index.c
CHANGED
@@ -230,9 +230,11 @@ static int
|
|
230
230
|
}
|
231
231
|
multi_ellip = 1;
|
232
232
|
} else {
|
233
|
-
|
234
|
-
|
235
|
-
|
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
|
}
|
data/src/na_random.c
CHANGED
@@ -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
|
-
|
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!",
|
405
|
-
|
411
|
+
rb_define_method(cNArray, "random!", na_random_bang,-1);
|
412
|
+
rb_define_method(cNArray, "random", na_random,-1);
|
406
413
|
}
|
data/src/narray.c
CHANGED
@@ -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(
|
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
|
-
|
735
|
-
|
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
|
-
|
738
|
-
|
739
|
-
|
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("-@");
|
data/src/narray.h
CHANGED
@@ -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.
|
23
|
-
#define NARRAY_VERSION_CODE
|
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
|
-
|
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
|
-
#
|
55
|
-
typedef
|
66
|
+
# ifdef HAVE_UINT32_T
|
67
|
+
typedef uint32_t u_int32_t;
|
56
68
|
# else
|
57
|
-
# if
|
58
|
-
typedef unsigned
|
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
|
-
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
|
-
|
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
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
-
|
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
|
-
|
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
|
|