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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ef041f60282c09c58765f159e598b55a3cc7cd4
4
- data.tar.gz: 624800e2934fe3858adfbbd62e6455574bce512b
3
+ metadata.gz: 8d9e08234443fb6561f27415e8983fb38c891caa
4
+ data.tar.gz: 7acf0c970c1f76f00d994d4c63dfd4274c7adb71
5
5
  SHA512:
6
- metadata.gz: 1e8bf852ff5b4c8cad5e541b68604784a401ab140c01654f8bd442b4899c5b047de3d55dca050ab0e8452488f2fe56bd22cb0f40f7afa6620eb7277975ffffd2
7
- data.tar.gz: 35fd9c5279d0b45c7a651c11ea06c9b42f26035697e0093a1b6cc32f95bb6dbb2a3b79ce6fd1f111d1fe0e0c6d3b0c5b316abba785500f298a8b42effdc030a4
6
+ metadata.gz: 0d670a1746cac7d99e41ba6cd2ff670d1b9cf77542db9fa0b1169316e06aeb8dd0fee263838a9a3647c861084ca8e967f4a493e25fce47f9f4f34eff2502b589
7
+ data.tar.gz: 27dadc6876785f9a01bc31445b75674d73454311fec1d32fa2dbaf564b14810f4b6023a976476402b3831554c602fe627ca0b6d854b7df53fc08353b2cdd57ef
@@ -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) + initial
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
- [narray.typecode, columns, rows, narray.to_s].join(":")
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
- typecode, columns, rows, as_str = arg.split(":",4)
32
- Matrix.new(NArray.to_na(as_str.to_s, typecode.to_i).reshape(columns.to_i, rows.to_i), typecode.to_i)
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 inspect
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
- inspect_rows = [10, self.rows].min
264
- inspect_columns = [10, self.columns].min
265
- more_rows = inspect_rows < self.rows
266
- more_columns = inspect_columns < self.columns
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
- to_print = self.matrix[0...inspect_columns, 0...inspect_rows]
269
- as_strings = inspect_columns.times.map do |i|
270
- column = to_print[i, 0...inspect_rows].flatten.to_a.map{|f| f.to_s.gsub(/(\.\d{4}).*/, "\\1") }
271
- max_width = column.map{|s| s.length }.max
272
- column.map!{|s| s.rjust(max_width, ' ')} + (more_rows ? ['.' * max_width] : [])
273
- end.transpose
274
- "#{rows} x #{columns} Matrix\nM#{box_lines(as_strings.map{|row| row.join(", ") }, more_columns)}"
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)
@@ -1,3 +1,3 @@
1
- module Rmatrix
2
- VERSION = "0.1.7"
1
+ module RMatrix
2
+ VERSION = "0.1.8"
3
3
  end
@@ -5,7 +5,7 @@ require 'rmatrix/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "rmatrix"
8
- spec.version = Rmatrix::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
@@ -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
- Enumeration, each over columns, each over rows, each element, each reverse, each column/row reversed
4
- Map to Matrix
5
- Select rows
6
- Select columns
7
- Slice/Mask rows and columns
8
- Specs
9
- Float, Double, Complex, Double Complex and integer types
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.7
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-23 00:00:00.000000000 Z
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