rmatrix 0.1.7 → 0.1.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.
- 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
|