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