matrix_extensions 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -6
- data/lib/matrix_extensions.rb +33 -12
- data/lib/matrix_extensions/version.rb +1 -1
- data/spec/matrix_extensions_spec.rb +43 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78aace705667ce7954ca00df56c97994d7e6e3cb
|
4
|
+
data.tar.gz: b0691977b852e9a5ce290d133d1800849d2d6ea7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79490c48885fe48b33a642b69cefa64d6b2d12be4b340895391daa3a40b69ec7c040ffdce3d4eb7babdf06cc8cb66da3b7aeaa21dce099fec0c785db2bb12a66
|
7
|
+
data.tar.gz: aafc9805adb15f809f2eee55e85449f6c52a4cc03d1bf47a951a6644e9f5eae11633d674d3bc6d0b0a4f8caf27e295257658c39433722a6e5cdd55b1f64a9b6d
|
data/README.md
CHANGED
@@ -47,15 +47,12 @@ Matrix[ [2,4], [1,4] ].element_exponentiation Matrix[ [2,4], [1,4]] ]
|
|
47
47
|
=> Matrix[[4, 256], [1, 256]]
|
48
48
|
```
|
49
49
|
|
50
|
-
**Prefilled matrix with
|
50
|
+
**Prefilled matrix with ones:**
|
51
51
|
|
52
52
|
```ruby
|
53
53
|
require 'matrix_extensions' # if not loaded automatically
|
54
54
|
|
55
|
-
Matrix.
|
56
|
-
=> Matrix[[0, 0, 0, 0], [0, 0, 0, 0]]
|
57
|
-
|
58
|
-
Matrix.ones(2,2)
|
55
|
+
Matrix.one(2,2)
|
59
56
|
=> Matrix[[1, 1], [1, 1]]
|
60
57
|
```
|
61
58
|
|
@@ -108,7 +105,7 @@ Removes a set number of trailing rows from a matrix (destructive) and returns th
|
|
108
105
|
require 'matrix_extensions' # if not loaded automatically
|
109
106
|
|
110
107
|
Matrix[ [1,2,3], [4,5,6], [7,8,9] ].vpop(2)
|
111
|
-
=> Matrix[[
|
108
|
+
=> => Matrix[[7, 8, 9], [4, 5, 6]]
|
112
109
|
```
|
113
110
|
|
114
111
|
## Contributing
|
data/lib/matrix_extensions.rb
CHANGED
@@ -4,18 +4,11 @@ require 'matrix'
|
|
4
4
|
# An extension to the Ruby Matrix class.
|
5
5
|
# @author Michael Imstepf
|
6
6
|
class Matrix
|
7
|
-
# Matrix prefilled with zeros.
|
8
|
-
# @param m [Matrix] matrix
|
9
|
-
# @return [Matrix] matrix
|
10
|
-
def self.zeros(rows = 1, columns = 1)
|
11
|
-
Matrix.build(rows, columns) { 0 }
|
12
|
-
end
|
13
|
-
self.singleton_class.send(:alias_method, :zeroes, :zeros)
|
14
|
-
|
15
7
|
# Matrix prefilled with ones.
|
16
|
-
# @param
|
8
|
+
# @param rows [Integer] number of rows
|
9
|
+
# @param columns [Integer] number of columns
|
17
10
|
# @return [Matrix] matrix
|
18
|
-
def self.
|
11
|
+
def self.one(rows = 1, columns = 1)
|
19
12
|
Matrix.build(rows, columns) { 1 }
|
20
13
|
end
|
21
14
|
|
@@ -99,11 +92,39 @@ class Matrix
|
|
99
92
|
Matrix.Raise ErrDimensionMismatch unless number_of_rows < self.row_count
|
100
93
|
|
101
94
|
dropped_rows = []
|
102
|
-
number_of_rows.times { dropped_rows
|
95
|
+
number_of_rows.times { dropped_rows << @rows.pop }
|
103
96
|
|
104
|
-
Matrix.rows(dropped_rows
|
97
|
+
Matrix.rows(dropped_rows)
|
105
98
|
end
|
106
99
|
|
100
|
+
# Copies rows.
|
101
|
+
# @param number_of_copies [Integer] number of times rows should be copied
|
102
|
+
# @return [Matrix] matrix
|
103
|
+
def vcopy(number_of_copies = 1)
|
104
|
+
existing_rows = rows.clone
|
105
|
+
|
106
|
+
number_of_copies.times do
|
107
|
+
existing_rows.each { |row| rows << row }
|
108
|
+
end
|
109
|
+
|
110
|
+
self
|
111
|
+
end
|
112
|
+
|
113
|
+
# Copies columns.
|
114
|
+
# @param number_of_copies [Integer] number of times columns should be copied
|
115
|
+
# @return [Matrix] matrix
|
116
|
+
def hcopy(number_of_copies = 1)
|
117
|
+
rows.each do |row|
|
118
|
+
existing_row = row.clone
|
119
|
+
number_of_copies.times do
|
120
|
+
existing_row.each { |v| row << v }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
@column_count += @column_count * number_of_copies
|
124
|
+
|
125
|
+
self
|
126
|
+
end
|
127
|
+
|
107
128
|
# Element-wise division.
|
108
129
|
# @param m [Matrix] matrix
|
109
130
|
# @return [Matrix] matrix
|
@@ -116,21 +116,9 @@ describe Matrix do
|
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
-
describe '#
|
119
|
+
describe '#one' do
|
120
120
|
it 'creates matrix with ones' do
|
121
|
-
expect(Matrix.
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe '#zeros' do
|
126
|
-
it 'creates matrix with zeros' do
|
127
|
-
expect(Matrix.zeros(2, 3)). to eq Matrix[ [0,0,0], [0,0,0] ]
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
describe '#zeroes' do
|
132
|
-
it 'creates matrix with zeros' do
|
133
|
-
expect(Matrix.zeros(2, 3)). to eq Matrix[ [0,0,0], [0,0,0] ]
|
121
|
+
expect(Matrix.one(2, 3)). to eq Matrix[ [1,1,1], [1,1,1] ]
|
134
122
|
end
|
135
123
|
end
|
136
124
|
|
@@ -250,5 +238,45 @@ describe Matrix do
|
|
250
238
|
expect(m23e).to eq Matrix[ [1,2,3] ]
|
251
239
|
end
|
252
240
|
end
|
253
|
-
end
|
241
|
+
end
|
242
|
+
|
243
|
+
describe '#vcopy' do
|
244
|
+
context 'when no argument is given' do
|
245
|
+
m23f = m23a.clone
|
246
|
+
|
247
|
+
it 'copies rows one time' do
|
248
|
+
expect(m23f.vcopy).to eq Matrix[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
|
249
|
+
expect(m23f).to eq Matrix[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'when number of copies equals 3' do
|
254
|
+
m23g = m23a.clone
|
255
|
+
|
256
|
+
it 'copies rows 3 times' do
|
257
|
+
expect(m23g.vcopy(3)).to eq Matrix[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
|
258
|
+
expect(m23g).to eq Matrix[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
describe '#hcopy' do
|
264
|
+
context 'when no argument is given' do
|
265
|
+
m23h = m23a.clone
|
266
|
+
|
267
|
+
it 'copies columns one time' do
|
268
|
+
expect(m23h.hcopy).to eq Matrix[[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]]
|
269
|
+
expect(m23h).to eq Matrix[[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]]
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
context 'when number of copies equals 3' do
|
274
|
+
m23i = m23a.clone
|
275
|
+
|
276
|
+
it 'copies columns 3 times' do
|
277
|
+
expect(m23i.hcopy(3)).to eq Matrix[[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]]
|
278
|
+
expect(m23i).to eq Matrix[[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]]
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
254
282
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: matrix_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Imstepf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|