fast_matrix 0.1.7 → 0.1.66

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
  SHA256:
3
- metadata.gz: f561247c42ab2329857835462917a1a1a3ca520cb262ab89b7cc968c903f5d55
4
- data.tar.gz: e606f0ca2ce438c5f0656203fb71ec70d747c8be82efc5090dd9f35fc735204c
3
+ metadata.gz: cfb8428a0aae303ecb09400b55429bc1d388d1f8d168f7583318b3de93cd16f0
4
+ data.tar.gz: b8c1bafdc23dbfcd02b801fb47f4bcfd7c865b4a545fe813327d3adaf2f41e64
5
5
  SHA512:
6
- metadata.gz: c3bbb8b3e6c3d1dfaff7de547dadbc559d86318b63e2321303bf821c8b1ed3e350034798cacb47f802b86712f7b7b1bf33cce7d71a0d46bb9a3d36c1687a83fe
7
- data.tar.gz: 31c9b5884b15bdcf1d82ade4090f256f30ec0dba5f1394e4b46e390ea4b5dd0df4c829823f668381253122f6cc1e9c8f19c45cfa6e7ce7bb483eec2ed51cbed1
6
+ metadata.gz: f7088df3f843e518dddd2dcabf92a5f8c7fe85fdd390dceb756c8e89f386e8b962e373790605246ab06bdae84be09ce09f92f9c1001a189c18d349f719161497
7
+ data.tar.gz: 8784f020358a09ffe6aba60391e43cead8d18990e0c0a85841c13390caad7a856aa886ac6051034f16d6fac6b6f05683703253e39ac8d7c6b249a4e4a8681810
data/.dockerignore CHANGED
@@ -10,3 +10,4 @@
10
10
  *.gem
11
11
  Gemfile.lock
12
12
  *.so
13
+ *.md
data/.travis.yml CHANGED
@@ -20,5 +20,4 @@ deploy:
20
20
  gem: fast_matrix
21
21
  on:
22
22
  tags: true
23
- repo: mmcs-ruby/fast_matrix
24
- branch: master
23
+ repo: mmcs-ruby/fast_matrix
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # FastMatrix
6
6
 
7
- Ruby wrapper around C matrices implementation written as exercise by MMCS students.
7
+ Ruby wrapper around C matrices implementation written as exercise by two MMCS students.
8
8
 
9
9
  ## Installation
10
10
 
@@ -22,9 +22,14 @@ Or install it yourself as:
22
22
 
23
23
  $ gem install fast_matrix
24
24
 
25
- ## Usage and documentation
25
+ ## Usage
26
26
 
27
- See our [GitHub Wiki](https://github.com/mmcs-ruby/fast_matrix/wiki).
27
+ TODO: Write usage instructions here
28
+
29
+ ### Differences with the standard matrix
30
+ * Supported only double values
31
+ * Can't be empty
32
+ * Some faster
28
33
 
29
34
  ## Development
30
35
 
@@ -28,16 +28,10 @@ void raise_check_range(int v, int min, int max)
28
28
  rb_raise(fm_eIndexError, "Index out of range");
29
29
  }
30
30
 
31
- void raise_check_rbasic(VALUE v, VALUE rBasic, const char* rbasic_name)
32
- {
33
- if(RBASIC_CLASS(v) != rBasic)
34
- rb_raise(fm_eTypeError, "Expected class %s", rbasic_name);
35
- }
36
-
37
31
  void init_fm_errors()
38
32
  {
39
33
  VALUE mod = rb_define_module("FastMatrix");
40
34
 
41
35
  fm_eTypeError = rb_define_class_under(mod, "TypeError", rb_eTypeError);
42
36
  fm_eIndexError = rb_define_class_under(mod, "IndexError", rb_eIndexError);
43
- }
37
+ }
@@ -12,9 +12,7 @@ double raise_rb_value_to_double(VALUE v);
12
12
  int raise_rb_value_to_int(VALUE v);
13
13
  // check if the value is in range and raise an error if not
14
14
  void raise_check_range(int v, int min, int max);
15
- // check if the basic class of value is rBasic and raise an error if not
16
- void raise_check_rbasic(VALUE v, VALUE rBasic, const char* rbasic_name);
17
15
 
18
16
  void init_fm_errors();
19
17
 
20
- #endif /* FAST_MATRIX_ERRORS_H */
18
+ #endif /* FAST_MATRIX_ERRORS_H */
@@ -125,9 +125,8 @@ void c_matrix_multiply(int n, int k, int m, const double* A, const double* B, do
125
125
  {
126
126
  const double* p_b = B + m * t;
127
127
  double d_a = p_a[t];
128
- if(d_a != 0)
129
- for(int i = 0; i < m; ++i)
130
- p_c[i] += d_a * p_b[i];
128
+ for(int i = 0; i < m; ++i)
129
+ p_c[i] += d_a * p_b[i];
131
130
  }
132
131
  }
133
132
  }
@@ -191,13 +190,10 @@ void strassen_iteration(int n, int k, int m, const double* A, const double* B, d
191
190
 
192
191
  bool check_strassen(int m, int n, int k)
193
192
  {
194
- return n > 2 && m > 2 && k > 2 && (double)m * (double)n * (double)k > 1000000;
193
+ return n > 2 && m > 2 && k > 2 && (double)m * (double)n * (double)k > 100000000;
195
194
  }
196
195
 
197
- // A B
198
- // [x x x] [x x x]
199
- // [x x x] => [x x x]
200
- // [x x x] [x x x]
196
+
201
197
  void strassen_copy(int m, int n, const double* A, double* B, int s_a, int s_b)
202
198
  {
203
199
  for(int i = 0; i < n; ++i)
@@ -209,41 +205,6 @@ void strassen_copy(int m, int n, const double* A, double* B, int s_a, int s_b)
209
205
  }
210
206
  }
211
207
 
212
- // if right = false and down = false | if right = true and down = false:
213
- // A B | A B
214
- // [x x x] [x x x] | [x x x] [x x x 0]
215
- // [x x x] => [x x x] | [x x x] => [x x x 0]
216
- // [x x x] [x x x] | [x x x] [x x x 0]
217
- // |
218
- // if right = false and down = true | if right = true and down = true:
219
- // A B | A B
220
- // [x x x] [x x x] | [x x x] [x x x 0]
221
- // [x x x] => [x x x] | [x x x] => [x x x 0]
222
- // [x x x] [x x x] | [x x x] [x x x 0]
223
- // [0 0 0] | [0 0 0 0]
224
- void strassen_copy_with_zero(int m, int n, const double* A, double* B, int s_a, int s_b, bool right, bool down)
225
- {
226
- double* p_B;
227
- for(int i = 0; i < n; ++i)
228
- {
229
- const double* p_A = A + i * s_a;
230
- p_B = B + i * s_b;
231
- for(int j = 0; j < m; ++j)
232
- p_B[j] = p_A[j];
233
- if(right)
234
- p_B[m] = 0;
235
- }
236
-
237
- if(down)
238
- {
239
- p_B = B + n * s_b;
240
- for(int j = 0; j < m; ++j)
241
- p_B[j] = 0;
242
- if(right)
243
- p_B[m] = 0;
244
- }
245
- }
246
-
247
208
  void strassen_sum_to_first(int m, int n, double* A, const double* B, int s_a, int s_b)
248
209
  {
249
210
  for(int i = 0; i < n; ++i)
@@ -292,6 +253,8 @@ void recursive_strassen(int n, int k, int m, const double* A, const double* B, d
292
253
  double* P6 = P5 + m1 * n1;
293
254
  double* P7 = P6 + m1 * n1;
294
255
  fill_d_array(7 * m1 * n1, P1, 0);
256
+ fill_d_array(k1 * n1, termA, 0);
257
+ fill_d_array(m1 * k1, termB, 0);
295
258
 
296
259
  // -----------P1-----------
297
260
  strassen_copy(k1, n1, A, termA, k, k1);
@@ -301,47 +264,55 @@ void recursive_strassen(int n, int k, int m, const double* A, const double* B, d
301
264
  strassen_sum_to_first(m2, k2, termB, B + m1 + m * k1, m1, m);
302
265
 
303
266
  recursive_strassen(n1, k1, m1, termA, termB, P1);
267
+ fill_d_array(k1 * n1, termA, 0);
304
268
  // -----------P2-----------
305
- strassen_copy_with_zero(k1, n2, A + k * n1, termA, k, k1, false, n1 != n2);
269
+ strassen_copy(k1, n2, A + k * n1, termA, k, k1);
306
270
  strassen_sum_to_first(k2, n2, termA, A + k1 + k * n1, k1, k);
307
271
 
308
272
  strassen_copy(m1, k1, B, termB, m, m1);
309
273
 
310
274
  recursive_strassen(n1, k1, m1, termA, termB, P2);
275
+ fill_d_array(m1 * k1, termB, 0);
311
276
  // -----------P3-----------
312
277
  strassen_copy(k1, n1, A, termA, k, k1);
313
278
 
314
- strassen_copy_with_zero(m2, k1, B + m1, termB, m, m1, m1 != m2, false);
279
+ strassen_copy(m2, k1, B + m1, termB, m, m1);
315
280
  strassen_sub_to_first(m2, k2, termB, B + m1 + m * k1, m1, m);
316
281
 
317
282
  recursive_strassen(n1, k1, m1, termA, termB, P3);
283
+ fill_d_array(k1 * n1, termA, 0);
284
+ fill_d_array(m1 * k1, termB, 0);
318
285
  // -----------P4-----------
319
- strassen_copy_with_zero(k2, n2, A + k1 + k * n1, termA, k, k1, k1 != k2, n1 != n2);
320
-
321
- strassen_copy_with_zero(m1, k2, B + m * k1, termB, m, m1, false, k1 != k2);
286
+ strassen_copy(k2, n2, A + k1 + k * n1, termA, k, k1);
287
+
288
+ strassen_copy(m1, k2, B + m * k1, termB, m, m1);
322
289
  strassen_sub_to_first(m1, k1, termB, B, m1, m);
323
290
 
324
291
  recursive_strassen(n1, k1, m1, termA, termB, P4);
292
+ fill_d_array(m1 * k1, termB, 0);
325
293
  // -----------P5-----------
326
294
  strassen_copy(k1, n1, A, termA, k, k1);
327
295
  strassen_sum_to_first(k2, n1, termA, A + k1, k1, k);
328
296
 
329
- strassen_copy_with_zero(m2, k2, B + m1 + m * k1, termB, m, m1, m1 != m2, k1 != k2);
330
-
297
+ strassen_copy(m2, k2, B + m1 + m * k1, termB, m, m1);
298
+
331
299
  recursive_strassen(n1, k1, m1, termA, termB, P5);
300
+ fill_d_array(k1 * n1, termA, 0);
332
301
  // -----------P6-----------
333
- strassen_copy_with_zero(k1, n2, A + k * n1, termA, k, k1, false, n1 != n2);
302
+ strassen_copy(k1, n2, A + k * n1, termA, k, k1);
334
303
  strassen_sub_to_first(k1, n1, termA, A, k1, k);
335
304
 
336
305
  strassen_copy(m1, k1, B, termB, m, m1);
337
306
  strassen_sum_to_first(m2, k1, termB, B + m1, m1, m);
338
307
 
339
308
  recursive_strassen(n1, k1, m1, termA, termB, P6);
309
+ fill_d_array(k1 * n1, termA, 0);
310
+ fill_d_array(m1 * k1, termB, 0);
340
311
  // -----------P7-----------
341
- strassen_copy_with_zero(k2, n1, A + k1, termA, k, k1, k1 != k2, false);
312
+ strassen_copy(k2, n1, A + k1, termA, k, k1);
342
313
  strassen_sub_to_first(k2, n2, termA, A + k1 + k * n1, k1, k);
343
314
 
344
- strassen_copy_with_zero(m1, k2, B + k1 * m, termB, m, m1, false, k1 != k2);
315
+ strassen_copy(m1, k2, B + k1 * m, termB, m, m1);
345
316
  strassen_sum_to_first(m2, k2, termB, B + m1 + m * k1, m1, m);
346
317
 
347
318
  recursive_strassen(n1, k1, m1, termA, termB, P7);
@@ -441,7 +412,7 @@ VALUE matrix_multiply(VALUE self, VALUE v)
441
412
  || RB_TYPE_P(v, T_BIGNUM))
442
413
  return matrix_multiply_mn(self, v);
443
414
  if(RBASIC_CLASS(v) == cMatrix)
444
- return strassen(self, v);
415
+ return matrix_multiply_mm(self, v);
445
416
  if(RBASIC_CLASS(v) == cVector);
446
417
  return matrix_multiply_mv(self, v);
447
418
  rb_raise(fm_eTypeError, "Invalid klass for multiply");
@@ -491,7 +462,6 @@ VALUE transpose(VALUE self)
491
462
 
492
463
  VALUE matrix_add_with(VALUE self, VALUE value)
493
464
  {
494
- raise_check_rbasic(value, cMatrix, "matrix");
495
465
  struct matrix* A;
496
466
  struct matrix* B;
497
467
  TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
@@ -514,7 +484,6 @@ VALUE matrix_add_with(VALUE self, VALUE value)
514
484
 
515
485
  VALUE matrix_add_from(VALUE self, VALUE value)
516
486
  {
517
- raise_check_rbasic(value, cMatrix, "matrix");
518
487
  struct matrix* A;
519
488
  struct matrix* B;
520
489
  TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
@@ -531,9 +500,9 @@ VALUE matrix_add_from(VALUE self, VALUE value)
531
500
  return self;
532
501
  }
533
502
 
503
+
534
504
  VALUE matrix_sub_with(VALUE self, VALUE value)
535
505
  {
536
- raise_check_rbasic(value, cMatrix, "matrix");
537
506
  struct matrix* A;
538
507
  struct matrix* B;
539
508
  TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
@@ -554,25 +523,6 @@ VALUE matrix_sub_with(VALUE self, VALUE value)
554
523
  return result;
555
524
  }
556
525
 
557
- VALUE matrix_sub_from(VALUE self, VALUE value)
558
- {
559
- raise_check_rbasic(value, cMatrix, "matrix");
560
- struct matrix* A;
561
- struct matrix* B;
562
- TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
563
- TypedData_Get_Struct(value, struct matrix, &matrix_type, B);
564
-
565
- if(A->m != B->m && A->n != B->n)
566
- rb_raise(fm_eIndexError, "Different sizes matrices");
567
-
568
- int m = B->m;
569
- int n = A->n;
570
-
571
- sub_d_arrays_to_first(n * m, A->data, B->data);
572
-
573
- return self;
574
- }
575
-
576
526
  double determinant(int n, const double* A)
577
527
  {
578
528
  double* M = malloc(n * n * sizeof(double));
@@ -609,6 +559,7 @@ VALUE matrix_determinant(VALUE self)
609
559
  struct matrix* A;
610
560
  TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
611
561
 
562
+
612
563
  int m = A->m;
613
564
  int n = A->n;
614
565
  if(m != n)
@@ -617,6 +568,24 @@ VALUE matrix_determinant(VALUE self)
617
568
  return DBL2NUM(determinant(n, A->data));
618
569
  }
619
570
 
571
+ VALUE matrix_sub_from(VALUE self, VALUE value)
572
+ {
573
+ struct matrix* A;
574
+ struct matrix* B;
575
+ TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
576
+ TypedData_Get_Struct(value, struct matrix, &matrix_type, B);
577
+
578
+ if(A->m != B->m && A->n != B->n)
579
+ rb_raise(fm_eIndexError, "Different sizes matrices");
580
+
581
+ int m = B->m;
582
+ int n = A->n;
583
+
584
+ sub_d_arrays_to_first(n * m, A->data, B->data);
585
+
586
+ return self;
587
+ }
588
+
620
589
  VALUE matrix_fill(VALUE self, VALUE value)
621
590
  {
622
591
  double d = raise_rb_value_to_double(value);
@@ -630,15 +599,13 @@ VALUE matrix_fill(VALUE self, VALUE value)
630
599
 
631
600
  VALUE matrix_equal(VALUE self, VALUE value)
632
601
  {
633
- if(RBASIC_CLASS(value) != cMatrix)
634
- return Qfalse;
635
602
  struct matrix* A;
636
603
  struct matrix* B;
637
604
  TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
638
605
  TypedData_Get_Struct(value, struct matrix, &matrix_type, B);
639
606
 
640
607
  if(A->n != B->n || A->m != B->m)
641
- return Qfalse;
608
+ return Qfalse;
642
609
 
643
610
  int n = A->n;
644
611
  int m = B->m;
@@ -667,8 +634,6 @@ VALUE matrix_abs(VALUE self)
667
634
 
668
635
  VALUE matrix_greater_or_equal(VALUE self, VALUE value)
669
636
  {
670
- if(RBASIC_CLASS(value) != cMatrix)
671
- rb_raise(fm_eTypeError, "Expected class matrix");
672
637
  struct matrix* A;
673
638
  struct matrix* B;
674
639
  TypedData_Get_Struct(self, struct matrix, &matrix_type, A);
@@ -705,7 +670,7 @@ void init_fm_matrix()
705
670
  rb_define_method(cMatrix, "-", matrix_sub_with, 1);
706
671
  rb_define_method(cMatrix, "-=", matrix_sub_from, 1);
707
672
  rb_define_method(cMatrix, "fill!", matrix_fill, 1);
708
- //rb_define_method(cMatrix, "strassen", strassen, 1);
673
+ rb_define_method(cMatrix, "strassen", strassen, 1);
709
674
  rb_define_method(cMatrix, "abs", matrix_abs, 0);
710
675
  rb_define_method(cMatrix, ">=", matrix_greater_or_equal, 1);
711
676
  rb_define_method(cMatrix, "determinant", matrix_determinant, 0);
@@ -102,7 +102,6 @@ VALUE c_vector_size(VALUE self)
102
102
 
103
103
  VALUE vector_add_with(VALUE self, VALUE value)
104
104
  {
105
- raise_check_rbasic(value, cVector, "vector");
106
105
  struct vector* A;
107
106
  struct vector* B;
108
107
  TypedData_Get_Struct(self, struct vector, &vector_type, A);
@@ -125,7 +124,6 @@ VALUE vector_add_with(VALUE self, VALUE value)
125
124
 
126
125
  VALUE vector_add_from(VALUE self, VALUE value)
127
126
  {
128
- raise_check_rbasic(value, cVector, "vector");
129
127
  struct vector* A;
130
128
  struct vector* B;
131
129
  TypedData_Get_Struct(self, struct vector, &vector_type, A);
@@ -141,51 +139,8 @@ VALUE vector_add_from(VALUE self, VALUE value)
141
139
  return self;
142
140
  }
143
141
 
144
- VALUE vector_sub_with(VALUE self, VALUE value)
145
- {
146
- raise_check_rbasic(value, cVector, "vector");
147
- struct vector* A;
148
- struct vector* B;
149
- TypedData_Get_Struct(self, struct vector, &vector_type, A);
150
- TypedData_Get_Struct(value, struct vector, &vector_type, B);
151
-
152
- if(A->n != B->n)
153
- rb_raise(fm_eIndexError, "Different sizes matrices");
154
-
155
- int n = A->n;
156
-
157
- struct vector* C;
158
- VALUE result = TypedData_Make_Struct(cVector, struct vector, &vector_type, C);
159
-
160
- c_vector_init(C, n);
161
- sub_d_arrays_to_result(n, A->data, B->data, C->data);
162
-
163
- return result;
164
- }
165
-
166
-
167
- VALUE vector_sub_from(VALUE self, VALUE value)
168
- {
169
- raise_check_rbasic(value, cVector, "vector");
170
- struct vector* A;
171
- struct vector* B;
172
- TypedData_Get_Struct(self, struct vector, &vector_type, A);
173
- TypedData_Get_Struct(value, struct vector, &vector_type, B);
174
-
175
- if(A->n != B->n)
176
- rb_raise(fm_eIndexError, "Different sizes matrices");
177
-
178
- int n = A->n;
179
-
180
- sub_d_arrays_to_first(n, A->data, B->data);
181
-
182
- return self;
183
- }
184
-
185
142
  VALUE vector_equal(VALUE self, VALUE value)
186
143
  {
187
- if(RBASIC_CLASS(value) != cVector)
188
- return Qfalse;
189
144
  struct vector* A;
190
145
  struct vector* B;
191
146
  TypedData_Get_Struct(self, struct vector, &vector_type, A);
@@ -316,8 +271,6 @@ void init_fm_vector()
316
271
  rb_define_method(cVector, "size", c_vector_size, 0);
317
272
  rb_define_method(cVector, "+", vector_add_with, 1);
318
273
  rb_define_method(cVector, "+=", vector_add_from, 1);
319
- rb_define_method(cVector, "-", vector_sub_with, 1);
320
- rb_define_method(cVector, "-=", vector_sub_from, 1);
321
274
  rb_define_method(cVector, "eql?", vector_equal, 1);
322
275
  rb_define_method(cVector, "clone", vector_copy, 0);
323
276
  rb_define_method(cVector, "*", vector_multiply, 1);
data/fast_matrix.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = %q{Ruby wrapper around C matrices implementation}
12
12
  spec.description = %q{Ruby wrapper around C matrices implementation}
13
- spec.homepage = "https://github.com/mmcs-ruby/fast_matrix/wiki"
13
+ spec.homepage = "https://github.com/mmcs-ruby/fast_matrix"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.metadata["homepage_uri"] = spec.homepage
@@ -1,3 +1,3 @@
1
1
  module FastMatrix
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.66'
3
3
  end
data/lib/matrix/matrix.rb CHANGED
@@ -19,25 +19,13 @@ module FastMatrix
19
19
  alias element []
20
20
  alias component []
21
21
 
22
- def collect
23
- collected_rows = []
24
- rows.each do |i|
25
- collected_rows.push(yield i)
26
- end
27
- collected_rows
28
- end
29
-
30
- #
31
- # Overrides Object#to_s
32
- #
33
22
  def to_s
34
- "#{self.class}[#{collect do |row|
35
- '[' + row.join(', ') + ']'
36
- end.join(', ')}]"
23
+ convert.to_s
37
24
  end
38
25
 
39
- alias to_str to_s
40
- alias inspect to_str
26
+ def inspect
27
+ convert.inspect
28
+ end
41
29
 
42
30
  #
43
31
  # Create fast matrix from standard matrix
@@ -52,42 +40,14 @@ module FastMatrix
52
40
  fast_matrix
53
41
  end
54
42
 
55
- #
56
- # Yields all elements of the matrix, starting with those of the first row
57
- #
58
- # Matrix[ [1,2], [3,4] ].each { |e| puts e }
59
- # # => prints the numbers 1 to 4
60
- def each(&block)
61
- raise NotSupportedError unless block_given?
62
-
63
- each_with_index { |elem, _, _| block.call(elem) }
64
- self
65
- end
66
-
67
- #
68
- # Same as #each, but the row index and column index in addition to the element
69
- #
70
- # Matrix[ [1,2], [3,4] ].each_with_index do |e, row, col|
71
- # puts "#{e} at #{row}, #{col}"
72
- # end
73
- # # => Prints:
74
- # # 1 at 0, 0
75
- # # 2 at 0, 1
76
- # # 3 at 1, 0
77
- # # 4 at 1, 1
78
- #
79
43
  def each_with_index
80
- raise NotSupportedError unless block_given?
81
-
82
44
  (0...row_count).each do |i|
83
45
  (0...column_count).each do |j|
84
46
  yield self[i, j], i, j
85
47
  end
86
48
  end
87
- self
88
49
  end
89
50
 
90
- # don't use (Issue#1)
91
51
  def each_with_index!
92
52
  (0...row_count).each do |i|
93
53
  (0...column_count).each do |j|
@@ -116,19 +76,5 @@ module FastMatrix
116
76
  end
117
77
  result
118
78
  end
119
-
120
- private
121
-
122
- def rows
123
- rows = []
124
- (0...row_count).each do |i|
125
- row = []
126
- (0...column_count).each do |j|
127
- row.push(element(i, j))
128
- end
129
- rows.push(row)
130
- end
131
- rows
132
- end
133
79
  end
134
80
  end
data/lib/vector/vector.rb CHANGED
@@ -21,32 +21,12 @@ module FastMatrix
21
21
  Array.new(size) { |i| self[i] }
22
22
  end
23
23
 
24
- def to_s
25
- "#{self.class}[#{to_ary.join(', ')}]"
26
- end
27
- alias to_str to_s
28
- alias inspect to_str
29
-
30
- #
31
- # Iterate over the elements of this vector
32
- #
33
- def each
34
- raise NotSupportedError unless block_given?
35
-
36
- (0...size).each do |i|
37
- yield self[i]
38
- end
39
- self
40
- end
41
-
42
24
  def each_with_index
43
25
  (0...size).each do |i|
44
26
  yield self[i], i
45
27
  end
46
- self
47
28
  end
48
29
 
49
- # don't use (Issue#1)
50
30
  def each_with_index!
51
31
  (0...size).each do |i|
52
32
  self[i] = yield self[i], i
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_matrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.66
5
5
  platform: ruby
6
6
  authors:
7
7
  - mmcs_ruby
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-03 00:00:00.000000000 Z
11
+ date: 2019-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,11 +117,11 @@ files:
117
117
  - lib/scalar.rb
118
118
  - lib/vector/constructors.rb
119
119
  - lib/vector/vector.rb
120
- homepage: https://github.com/mmcs-ruby/fast_matrix/wiki
120
+ homepage: https://github.com/mmcs-ruby/fast_matrix
121
121
  licenses:
122
122
  - MIT
123
123
  metadata:
124
- homepage_uri: https://github.com/mmcs-ruby/fast_matrix/wiki
124
+ homepage_uri: https://github.com/mmcs-ruby/fast_matrix
125
125
  source_code_uri: https://github.com/mmcs-ruby/fast_matrix
126
126
  post_install_message:
127
127
  rdoc_options: []