forked from masa16/narray
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SPEC.ja
287 lines (236 loc) · 10 KB
/
SPEC.ja
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
Ruby/NArray ver 0.5.9p8 (2010-01-16) by Masahiro TANAKA
クラスメソッド:
NArray.new(typecode, size, ...) 配列を生成する。要素は0で初期化。
NArray.byte(size,...) 1 byte unsigned integer
NArray.sint(size,...) 2 byte signed integer
NArray.int(size,...) 4 byte signed integer
NArray.sfloat(size,...) single precision float
NArray.float(size,...) double precision float
NArray.scomplex(size,...) single precision complex
NArray.complex(size,...) double precision complex
NArray.object(size,...) Ruby object
以上要素は0またはnilで初期化。
NArray.to_na(array) NArrayに変換
NArray.to_na(string,type[,size,..])
NArray[...]
NArray[1,5,10.0] #=> NArray.float(3):[1.0, 5.0, 10.0]
NArray[1..10] #=> NArray.int(10):[1,2,3,4,5,6,7,8,9,10]
クラス変数:
CLASS_DIMENSION データとして扱われる次元。
NArrayは0。NVectorは1。NMatrixは2。
配列情報参照
self.dim 次元(インデックスの数)を返す。
self.rank 次元(インデックスの数)を返す。
self.shape 次元ごとのサイズを返す。
self.total 全要素数を返す。
インデックス参照
self[ dim0, dim1, ... ]
-- インデックス引数に指定できるもの: 数値、範囲、配列、true, false
-- インデックスの順序: FORTRAN 型
-- 添字引数が1つの場合、多次元配列はflattenされた1次元配列とみなされる。
例: a が 3x3 配列のとき、a[3] は a[0,1] の要素を指す。
a[ 1, 2, -1 ] 要素の取り出し。負数は最後から数える(-1が最後)
要素指定の次元は縮約される。
a[ 0..3, 4..1 ] 範囲取り出し。範囲の最後が最初より前ならば逆順になる。
a[ [1,4,2] ] インデックス配列。要素が[a[1],a[4],a[2]]のNArrayが返る。
a[] a.dup と同じ。
a[ 0, true ] a[0, 0..-1] と同じ。
a[ 0, false ] aが3次元のとき、a[0,true,true] と同じ。
省略された次元すべてにtrueを指定したのと同じ。
a[ mask ] マスキング. mask は長さが a と等しい byte 型
NArray. mask の各要素の値に応じて、a のそれぞ
れは落される(0の場合)か、保持される(0以外の場合)。
例:
a=NArray.float(2,2).indgen!
p a[ a.lt 3 ]
--> [ 0.0, 1.0, 2.0 ]
(a.lt 3 は byte 型 NArray を返す)
(同じことは a[ (a.lt 3).where ] でも出来る)
-- self.slice(...) self[...] と同じだが、長さが1になった次元を落
さず(self[]は落す)、もとのランクを保つ。但し、
1次元インデックス付けとマスキングは例外([]と同
じ)。
インデックス代入。-- 取出しとほぼ同じルール。
a[ 1, 2, 3 ] = 1
a[ 0..3, 1..4, 2..5 ] = 2
a[ [1,3,2,4], true ] = 3
a[] = 4 a.fill!(4) と同じ。
a[0..2] = b[1..5] --> 要素数が異なるのでエラー。
a[1,2] = b[0..2,1..3] [1,2]を始点として代入。
a[0..2,0..3] = b[0..2,1] 繰り返し代入。
( a[0,0]=b[0,1],..,a[0,3]=b[0,1] )
値のセット。
self.indgen!([start[,step]]) startからstepづつ増加した値をセット。
self.fill!(value) すべての要素にvalueをセット。
self.random!(max) 0<=x<max の一様なランダム値を生成。
using MT19337
self.randomn 平均0、分散1の正規分布のランダム値を生成。
(Box-Muller)
NArray.srand([seed]) 乱数のシードを設定。
省略時は時刻から自動生成。
演算: 要素ごとにおこなう。
a = NArray.float(3,3).indgen
b = NArray.float(3,3).fill(10)
c = a*b # --> NArray.float(3,3)
a = NArray.float(3,1).indgen
b = NArray.float(1,3).fill(10)
c = a*b # --> NArray.float(3,3) -- size=1の次元は拡張する。
算術演算子
-self
self + other
self - other
self * other
self / other
self % other
self ** other
self.abs
self.add! other
self.sbt! other
self.mul! other
self.div! other
self.mod! other
self.mul_add(other,dim,...) (self * other).sum(dim,...)とほぼ同じ。
ただし途中で配列を作らない。
ビット演算子(整数のみ可能)
~self
self & other
self | other
self ^ other
比較
-- 要素ごとに値を比較し、結果をBYTE型 NArrayを返す。
true/falseでないことに注意。
self.eq other ( ver 0.5.4 以降、== 演算子は廃止しました。)
self.ne other
self.gt other
self > other
self.ge other
self >= other
self.lt other
self < other
self.le other
self <= other
self.and other 要素ごとの条件比較。
self.or other
self.xor other
self.not other
self.all? 要素がすべて真ならば真。
self.any? 要素のどれかが真ならば真。
self.none? 要素のどれかが真ならば真。
self.where 要素が真のインデックス配列を返す。
self.where2 要素が真と偽のインデックス配列を含む(Ruby)配列を返す。
例: idx_t,idx_f = (a>12).where2
統計
self.sum(dim,..) 指定した次元の和。
self.mean(dim,..) 指定した次元の平均。
self.stddev(dim,..) 指定した次元の標準偏差(標本標準偏差)。
self.rms(dim,..) 指定した次元のroot mean square。
self.rmsdev(dim,..) 指定した次元のroot mean square deviation。
self.min(dim,..) 指定した次元の最小。
self.max(dim,..) 指定した次元の最大。
(省略時は全ての次元。Range指定可。)
self.median(dim) 0..dimの次元の中央値。省略時はすべての次元。
ソート
self.sort(dim) 0..dimの次元でソート。省略時はすべての次元。
self.sort_index(dim) ソートしたインデックスを返す。
self[self.sort_index] は self.sort と同等。
転置
self.transpose( dim0, dim1, .. )
配列の転置。selfの第(dim0)次元が新しい配列の第0次元になる。
負数は後からの順番。
transpose(-1,1..-2,0) で最初と最後を入れ換え。
インデックスの変更 (要素数は不変)
self.reshape!(size,...)
self.shape= size,...
self.newdim!(dim,...) 指定位置にサイズ1の次元を挿入する。
データの参照
self.refer selfのデータを参照する別のオブジェクトを作成。
self.reshape(size,...) self.refer.reshape! と同様。
self.newdim(dim,...) self.refer.newdim! と同様。
型変換
self.floor selfより小さい最大の整数を返す。
self.ceil selfより大きい最小の整数を返す。
self.round selfにもっとも近い整数を返す。
self.to_f 値を浮動小数点数に変換する。
self.to_i 値を整数に変換する。
self.to_a 値をRubyの配列に変換する。
self.to_s バイナリデータをそのままRubyの文字列データに変換する。
self.to_string 各要素を文字列に変換する。
イテレータ
self.each {|i| ...}
self.collect {|i| ...}
self.collect! {|i| ...}
バイトスワップ
self.swap_byte バイトスワップ
self.hton ネットワークバイトオーダーに変換
self.ntoh
self.htov VAXバイトオーダーに変換
self.vtoh
Boolean / マスク関係
self.count_false 値 == 0 の要素数 (byte型のみ)
self.count_true 値 == 1 の要素数 (byte型のみ)
self.mask( mask ) self[ mask ] と同じだかマスキング専用.
[] と違い int, sint のマスクも使える.
複素数
self.real
self.imag
self.conj
self.conj!
self.angle atan2(self.imag, self.real)
self.imag= other 虚数部分にotherをセット。
self.im 虚数倍。
NMath モジュール
sqrt(x)
exp(x)
log(x)
log10(x)
log2(x)
atan2(x,y)
sin,cos,tan
sinh,cosh,tanh
asin,acos,atan
asinh,acosh,atanh
csc,sec,cot
csch,sech,coth
acsc,asec,acot
acsch,asech,acoth
covariance
FFTW モジュール (fftw-2.1.3をshared libでコンパイルしたもので確認)
(別モジュール)
fftw(x,[1|-1])
convol(a,b) FFTWを用いた畳み込み。
NMatrix
NArrayのサブクラス。最初の2次元をMatrixとして用いる。
残りの次元は多次元配列として扱われる。
次元の順序は、数学での表記とは逆: a_ij => a[j,i]
メソッド:
+,- 相手が NMatrix のときに演算可。
* 相手が NMatrix または NVector のときは Matrix積。
相手が Numeric または NArray のときは Scalar積。
例: NMatrix[[1,2],[3,4]] * [1,10]
== NMatrix[ [[1,2],[3,4]], [[10,20],[30,40]] ]
/ 相手が Numeric または NArray のときはScalar除算。
相手が square NMatrix のときはLUにより線形方程式を解く。
a/b == b.lu.solve(a)
transpose 引数を省略した場合は、最初のMatrix次元を交換。
diagonal(other)
diagonal!(other) 対角要素に値をセット。引数省略時は1をセット。
I 対角要素に値に1をセット。
inverse 逆行列
lu LU分解を計算。NMatrixLU クラスのインスタンスを返す。
NVector
NArrayのサブクラス。最初の1次元をVectorとして用いる。
残りの次元は多次元配列として扱われる。
メソッド:
+,- 相手が NVector のときに演算可。
* 相手が NMatrix のときは Matrix積。
相手が NVector のときは 内積。
相手が Numeric または NArray のときは Scalar積。
/ 相手が Numeric または NArray のときは Scalar除算。
相手が square NMatrix のときはLUにより線形方程式を解く。
v/m == m.lu.solve(v)
NMatrixLU
NMatrix#lu メソッドにより作られる。
LU (NMatrix) と pivot (NVector) を含む。
メソッド:
solve(other) LU分解の結果を使って other を解く。
other は NMatrix または NVector のインスタンス。