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