File: SPEC.en.txt

package info (click to toggle)
ruby-narray 0.6.1.2-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 396 kB
  • sloc: ansic: 4,510; ruby: 771; makefile: 7
file content (327 lines) | stat: -rw-r--r-- 10,327 bytes parent folder | download | duplicates (6)
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
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327

	Ruby/NArray  ver 0.6.0.7 (2013-02-01)	by Masahiro TANAKA


Class method:
    NArray.new(typecode, size, ...)	create new NArray. initialize with 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
				all above method initialize with 0 or nil.

    NArray.to_na(array)			convert to 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 constant:
    CLASS_DIMENSION	# of dimension treated as data.
			0 for NArray, 1 for NVector, 2 for NMatrix.

NArray information
    self.dim		Return the dimension = the number of indices
    self.rank		same as dim
    self.shape		Return the array of sizes of each index
    self.total		Return the number of total elements

Slicing Array
 - Index components:	Integer, Range, Array, true.
 - Index order:		FORTRAN type.
    a[ 1, 2, -1 ]	element slicing.
			  If negative, counts backward from the end.
			  Element-dimensions are contracted.
    a[ 0..3, 4..1 ]	extract in the range.
			  If the former of the range is bigger,
			   return elements in reversed order.
    a[ [1,3,2,4] ]	an array with the elements of the indices.
			  If `a' has multi-dimension but, in [],
			   single index is specified,
			   `a' is treated as a single dimension array.
    a[ 1, 2..3, [1,3,2,4], true ]   compound index.
				    This returns 3-dim array.
    a[]			same as a.dup.
    a[ 0, true ]	sams as a[0,0..-1]. `true' means all.
    a[ false, 0 ]	same as a[true,true,0], if a is a 3-d array,
			`false' means ellipsis dimension.
    a[ mask ]		masking. "mask" is a byte NArray with its
			length equal to that of "a". According to the
			value of each element of mask, the corresponding
			element in "a" is eliminated (when 0) or
			retained (when not 0).
			Example:
				a=NArray.float(2,2).indgen!
				p a[ a.lt 3 ]
				--> [ 0.0, 1.0, 2.0 ]
				(Here, a.lt 3 gives a byte NArray)
				(This is also done by a[ (a.lt 3).where ])

 - A 2-or-more-dim array object with only one argument in `[ ]',
   is treated as a flat 1-d array.
   e.g.: a[3] is same as a[0,1] if a is 3x3 array.

 - self.slice(...)	Same as self[...] but keeps the rank of
			original array by not elimiting dimensions
			whose length became equal to 1 (which self[]
			does). This is not the case with the
			1-dimensional indexing and masking (same as []).

Replacing Elements -- Same rule as slicing

    a[ 1, 2, 3 ] = 1
    a[ 0..3, 1..4, 2..5 ] = 2
    a[ [1,3,2,4], true ] = 3
    a[] = 4			Same as a.fill!(4)

    a[0..2]  = b[1..5]		--> Error! due to different num of elements.
    a[1,2]   = b[0..2,1..3]	Storing elements from index [1,2]
				( a[1,2]=b[0,1],a[2,2]=b[1,1],... )
    a[0..2,0..3]  = b[0..2,1]	Storing repetitively
				( a[0,0]=b[0,1],..,a[0,3]=b[0,1] )

Delete row/columns -- Complement of slice

    self.delete_at(...)	  Arguments are the same as the [] and slice methods
			  see https://github.com/masa16/narray/issues/5

Filling values
    self.indgen!([start[,step]]) Generate index;
				 Set values from 'start' with 'step' increment
    self.fill!(value)		 Fill elements with 'value'
    self.random!(max)		 Set random values between 0<=x<max
				 using MT19337
    self.randomn		 Set Normally distributed random values
				 with mean=0, dispersion=1 (Box-Muller)
    NArray.srand([seed])	 Set random seed.
				 A time-depend seed is choosed if omitted.

Operation: performed element by element
    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 dimension is extensible.

Arithmetic operator
    -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

Bitwise operator (only for integers)
    ~self
    self & other
    self | other
    self ^ other

Comparison
  -- element-wise comparison, results in BYTE-type NArray;
     Note that not true nor false is returned.
    self.eq other  (distinguish from == operator; see below )
    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  element-wise condition.
    self.or  other
    self.xor other
    self.not other

    self.all?	  true if all the elements are true.
    self.any?	  true if any element is true.
    self.none?	  true if none of the element is true.
    self.where	  Return NArray of indices where elements are true.
    self.where2	  Return Array including two NArrays of indices,
		  where elements are true and false, respectively.

	e.g.: idx_t,idx_f = (a>12).where2

Equivalence
    NArray[1] == NArray[1]      #=> true
    NArray[1] == NArray[1.0]    #=> true
    NArray[1].eql? NArray[1]    #=> true
    NArray[1].eql? NArray[1.0]  #=> false
    NArray[1].equal? NArray[1]  #=> false
    a=b=NArray[1]; a.equal? b   #=> true

Statistics
    self.sum(dim,..)     Summation
    self.cumsum          Cumulative Summation (for 1-d array)
    self.prod(dim,..)    Product (Multiply elements)
    self.cumprod         Cumulative Produce (for 1-d array)
    self.mean(dim,..)    Mean
    self.stddev(dim,..)  Standard deviation
    self.rms(dim,..)     Root mean square
    self.rmsdev(dim,..)  Root mean square deviation
    self.min(dim,..)     Minimum
    self.max(dim,..)     Maximum
	note: * If dimensions are specified, statistics are performed
	      	on those dimensions and the rest dimensions are kept.
	      * Range can be used.
	      * If dimension is not specified, statistics are performed
	        for all the elements.
    self.median(dim)	 Median in 0..dim (All dimensions if omitted)

Sort
    self.sort(dim)	  Sort in 0..dim (All dimensions if omitted)
    self.sort_index(dim)  Return index of Sort result.
			     self[self.sort_index] equals to self.sort.

Transpose
    self.transpose( dim0, dim1, .. )
	Transpose array.
	The dim0-th dimension goes to the 0-th dimension of new array.
	Negative number counts backward.
	transpose(-1,1..-2,0) is replacement between the first and the last.

Changing Shapes of indices
    self.reshape!(size,...)
    self.shape=(size,...)
    self.newdim=(dim)	    Insert new dimension with size=1

Reference to another NArray
    self.refer			create NArray obj referring to another NArray
    self.reshape(size,...)	same as self.refer.reshape!
    self.newdim(dim,...)	same as self.refer.newdim!

Reverse and Rotate
    self.reverse([dim,...])	Reverse array at axes
    self.rot90([k])		Rotate array by 90 degrees k times

Type conversion
    self.floor      Return integer NArray whose elements processed 'floor'
    self.ceil
    self.round
    self.to_f	    Convert NArray type to float
    self.to_i       Convert NArray type to integer
    self.to_a	    Convert NArray type to Ruby-object
    self.to_s	    Convert NArray data to String as a binary data.
    self.to_string  Convert NArray type to Ruby-object
		    containing Strings as printed elements

Iteration
    self.each {|i| ...}
    self.collect {|i| ...}
    self.collect! {|i| ...}

Byte swap
    self.swap_byte	swap byte order
    self.hton		convert to network byte order
    self.ntoh
    self.htov		convert to VAX byte order
    self.vtoh

Boolean / mask related
    self.count_false	count # of elements whose value == 0 (only for
			byte type)
    self.count_true	count # of elements whose value != 0 (only for
			byte type)
    self.mask( mask )	same as self[ mask ], but exclusively for masking.
			Unlike [], a int or sint mask is accepted.

Complex compound number
    self.real
    self.imag
    self.conj
    self.conj!
    self.angle		atan2(self.imag, self.real)
    self.imag= other	set imaginary part
    self.im		multiply by imaginary unit

NMath module
    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	(no idea why NMath::covariance doesn't work)


FFTW module
 (separate module)
    fftw(x,[1|-1])
    convol(a,b)		convolution with FFTW


NMatrix

  Subclass of NArray.  First 2 dimensions are used as Matrix.
  Residual dimensions are treated as Multi-dimensional array.
  The order of Matrix dimensions is opposite from
  the notation of mathematics:  a_ij => a[j,i]

  Methods:
    +,-	 enable if other is NMatrix.
    *	 Matrix product if other is NMatrix or NVector.
	 Scalar product if other is Numeric or NArray.
	 ex: NMatrix[[1,2],[3,4]] * [1,10]
	       == NMatrix[ [[1,2],[3,4]], [[10,20],[30,40]] ]
    /	 Scalar division if other is Numeric or NArray.
	 Solve Linear Equation with LU factorization
	  if other is square NMatrix.  a/b == b.lu.solve(a)

    transpose		transpose Matrix dimensions if argument omitted.
    diagonal(val)
    diagonal!(val)	set val to diagonal elements. (set 1 if omitted)
    unit		set 1 to diagonal elements.
    inverse		Inverse matrix.
    lu			compute LU factorization.
			return NMatrixLU class object.

NVector

  Subclass of NArray.  First 1 dimension is used as Vector.
  Residual dimensions are treated as Multi-dimensional array.

  Methods:
    +,-	 enable if other is NVector.
    *	 Matrix product if other is NMatrix.
	 Inner product if other is NVector.
	 Scalar product if other is Numeric or NArray.
    /	 Scalar division if other is Numeric or NArray.
	 Solve Linear Equation with LU factorization
	   if other is square NMatrix.  v/m == m.lu.solve(v)


NMatrixLU

  Created by NMatrix#lu method.
  Including LU (NMatrix) and pivot (NVector).

  Methods:
    solve(other)	Solve with the result of LU factorization.
			other should be NMatrix or NVector instance.