rmatrix 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rmatrix/matrix.rb +75 -16
- data/lib/rmatrix/version.rb +2 -2
- data/rmatrix.gemspec +3 -1
- data/rmatrix.todo +9 -7
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d9e08234443fb6561f27415e8983fb38c891caa
|
4
|
+
data.tar.gz: 7acf0c970c1f76f00d994d4c63dfd4274c7adb71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d670a1746cac7d99e41ba6cd2ff670d1b9cf77542db9fa0b1169316e06aeb8dd0fee263838a9a3647c861084ca8e967f4a493e25fce47f9f4f34eff2502b589
|
7
|
+
data.tar.gz: 27dadc6876785f9a01bc31445b75674d73454311fec1d32fa2dbaf564b14810f4b6023a976476402b3831554c602fe627ca0b6d854b7df53fc08353b2cdd57ef
|
data/lib/rmatrix/matrix.rb
CHANGED
@@ -20,16 +20,34 @@ module RMatrix
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.blank(rows: 1, columns: 1, typecode: Typecode::SFLOAT, initial: 0)
|
23
|
-
self.new(NArray.new(typecode, columns, rows), typecode)
|
23
|
+
source = self.new(NArray.new(typecode, columns, rows), typecode)
|
24
|
+
source.narray[]= initial unless source.empty?
|
25
|
+
source
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_all(value)
|
29
|
+
narray[]=(value)
|
24
30
|
end
|
25
31
|
|
26
32
|
def _dump(level)
|
27
|
-
|
33
|
+
narray.to_s << ':' << columns.to_s << ':' << rows.to_s << ':' << narray.typecode.to_s
|
28
34
|
end
|
29
35
|
|
30
36
|
def self._load arg
|
31
|
-
|
32
|
-
|
37
|
+
split_index, buffer, index = 0, '', arg.length - 1
|
38
|
+
split = Array.new(3)
|
39
|
+
while split_index < 3
|
40
|
+
case char = arg[index]
|
41
|
+
when ':'
|
42
|
+
split[split_index] = buffer.reverse.to_i
|
43
|
+
split_index += 1
|
44
|
+
buffer = ''
|
45
|
+
else buffer << char
|
46
|
+
end
|
47
|
+
index -= 1
|
48
|
+
end
|
49
|
+
arg[index+1..-1] = ''
|
50
|
+
self.new(NArray.to_na(arg, split[0]).reshape(split[2], split[1]), split[0])
|
33
51
|
end
|
34
52
|
|
35
53
|
def each(&block)
|
@@ -257,21 +275,58 @@ module RMatrix
|
|
257
275
|
[rows, columns].include?(1)
|
258
276
|
end
|
259
277
|
|
260
|
-
def
|
278
|
+
def to_significant_figures(x, p)
|
279
|
+
x.zero? ? 0 : begin
|
280
|
+
nm = Math.log(x, 10.0).floor + 1.0 - p
|
281
|
+
(((10.0 ** -nm) * x).round * (10.0 ** nm)).round(nm.abs)
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
def inspect(sz=10, sig=6)
|
261
286
|
return 'M[Empty]' if empty?
|
262
287
|
return Vector::inspect_vector(self) if self.is_vector?
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
288
|
+
values = condensed(10, sig, '⋮', '…', "⋱")
|
289
|
+
max_width = 0
|
290
|
+
values = values.map{|line| line.map{|val| as_str = val.to_s; max_width = [as_str.length, max_width].max; as_str}}
|
291
|
+
values = values.map{|line| line.map{|val| val.rjust(max_width, ' ') }}
|
292
|
+
"#{rows} x #{columns} Matrix\nM[#{values.map{|row| "[#{row.join(", ")}]" }.join(",\n ")}"
|
293
|
+
end
|
267
294
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
295
|
+
def to_tex(sz = 10, sig=6)
|
296
|
+
values = condensed(sz, sig)
|
297
|
+
<<-TEX
|
298
|
+
\\begin{pmatrix}
|
299
|
+
#{values.map{|line| line.join(" & ")}.join(" \\\\ ")}
|
300
|
+
\\end{pmatrix}
|
301
|
+
TEX
|
302
|
+
end
|
303
|
+
|
304
|
+
def condensed(sz=10, sig=6, vdots='\\vdots', cdots='\\cdots', ddots='\\ddots')
|
305
|
+
width = [sz, self.cols].min
|
306
|
+
height = [sz, self.rows].min
|
307
|
+
insert_cdots = self.cols > sz
|
308
|
+
insert_vdots = self.rows > sz
|
309
|
+
|
310
|
+
width += 1 if insert_cdots
|
311
|
+
height += 1 if insert_vdots
|
312
|
+
|
313
|
+
blank = M.blank(rows: height, columns: width, typecode: Typecode::OBJECT)
|
314
|
+
blank.narray[0...width, 0...height] = self.narray[0...width, 0...height]
|
315
|
+
|
316
|
+
blank.narray[0...width, -1] = self.narray[0...width, -1]
|
317
|
+
blank.narray[-1,0...height] = self.narray[-1, 0...height]
|
318
|
+
|
319
|
+
blank.narray[0...width, -2] = vdots if insert_vdots
|
320
|
+
blank.narray[-2, 0...height] = cdots if insert_cdots
|
321
|
+
|
322
|
+
if insert_cdots && insert_vdots
|
323
|
+
blank.narray[-2, -2] = ddots
|
324
|
+
blank.narray[-1, -2] = vdots
|
325
|
+
blank.narray[-2, -1] = cdots
|
326
|
+
blank.narray[-1, -1] = self.narray[-1, -1]
|
327
|
+
end
|
328
|
+
|
329
|
+
blank.narray.to_a.map{|line| (sig ? Array(line).map{|v| Numeric === v ? to_significant_figures(v,sig) : v } : Array(line))}
|
275
330
|
end
|
276
331
|
|
277
332
|
def transpose
|
@@ -318,6 +373,10 @@ module RMatrix
|
|
318
373
|
end
|
319
374
|
end
|
320
375
|
|
376
|
+
def to_type(type)
|
377
|
+
Matrix.new(narray.to_type(type), type)
|
378
|
+
end
|
379
|
+
|
321
380
|
def self.gen_delegator(name)
|
322
381
|
define_method(name) do |*args, &blk|
|
323
382
|
result = matrix.send(name, *args, &blk)
|
data/lib/rmatrix/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = "0.1.
|
1
|
+
module RMatrix
|
2
|
+
VERSION = "0.1.8"
|
3
3
|
end
|
data/rmatrix.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'rmatrix/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rmatrix"
|
8
|
-
spec.version =
|
8
|
+
spec.version = RMatrix::VERSION
|
9
9
|
spec.authors = ["Wouter Coppieters"]
|
10
10
|
spec.email = ["wouter.coppieters@youdo.co.nz"]
|
11
11
|
|
@@ -34,6 +34,8 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency "minitest"
|
35
35
|
spec.add_development_dependency "pry"
|
36
36
|
spec.add_development_dependency "pry-byebug"
|
37
|
+
spec.add_development_dependency "rbczmq"
|
38
|
+
spec.add_development_dependency "iruby"
|
37
39
|
spec.add_runtime_dependency "narray"
|
38
40
|
spec.add_runtime_dependency "opencl_ruby_ffi"
|
39
41
|
end
|
data/rmatrix.todo
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
☐ Use Numo::NArray (Not ready yet)
|
2
|
+
☐ Implement to_tex for notebooks
|
1
3
|
✔ Update print @done (16-04-06 07:40)
|
2
4
|
✔ Basic matrix functions and tests @done (16-04-06 07:40)
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
✔ Enumeration, each over columns, each over rows, each element, each reverse, each column/row reversed @done (16-09-26 10:13)
|
6
|
+
✔ Map to Matrix @done (16-09-26 10:13)
|
7
|
+
✔ Select rows @done (16-09-26 10:13)
|
8
|
+
✔ Select columns @done (16-09-26 10:13)
|
9
|
+
✔ Slice/Mask rows and columns @done (16-09-26 10:13)
|
10
|
+
✔ Specs @done (16-09-26 10:13)
|
11
|
+
✔ Float, Double, Complex, Double Complex and integer types @done (16-09-26 10:13)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmatrix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rbczmq
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: iruby
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: narray
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|