nmatrix 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +102 -10
  3. data/README.rdoc +24 -32
  4. data/Rakefile +1 -1
  5. data/ext/nmatrix/data/complex.h +9 -0
  6. data/ext/nmatrix/data/data.cpp +78 -4
  7. data/ext/nmatrix/data/data.h +86 -54
  8. data/ext/nmatrix/data/rational.h +2 -0
  9. data/ext/nmatrix/data/ruby_object.h +38 -8
  10. data/ext/nmatrix/extconf.rb +13 -7
  11. data/ext/nmatrix/nmatrix.cpp +262 -139
  12. data/ext/nmatrix/nmatrix.h +11 -4
  13. data/ext/nmatrix/storage/common.cpp +20 -13
  14. data/ext/nmatrix/storage/common.h +18 -12
  15. data/ext/nmatrix/storage/dense.cpp +122 -192
  16. data/ext/nmatrix/storage/dense.h +4 -2
  17. data/ext/nmatrix/storage/list.cpp +467 -636
  18. data/ext/nmatrix/storage/list.h +6 -3
  19. data/ext/nmatrix/storage/storage.cpp +83 -46
  20. data/ext/nmatrix/storage/storage.h +7 -7
  21. data/ext/nmatrix/storage/yale.cpp +621 -361
  22. data/ext/nmatrix/storage/yale.h +21 -9
  23. data/ext/nmatrix/ttable_helper.rb +27 -31
  24. data/ext/nmatrix/types.h +1 -1
  25. data/ext/nmatrix/util/math.cpp +9 -10
  26. data/ext/nmatrix/util/sl_list.cpp +1 -7
  27. data/ext/nmatrix/util/sl_list.h +0 -118
  28. data/lib/nmatrix/blas.rb +59 -18
  29. data/lib/nmatrix/monkeys.rb +0 -52
  30. data/lib/nmatrix/nmatrix.rb +136 -9
  31. data/lib/nmatrix/nvector.rb +33 -0
  32. data/lib/nmatrix/shortcuts.rb +95 -16
  33. data/lib/nmatrix/version.rb +1 -1
  34. data/lib/nmatrix/yale_functions.rb +25 -19
  35. data/spec/blas_spec.rb +1 -19
  36. data/spec/elementwise_spec.rb +132 -17
  37. data/spec/lapack_spec.rb +0 -3
  38. data/spec/nmatrix_list_spec.rb +18 -0
  39. data/spec/nmatrix_spec.rb +44 -18
  40. data/spec/nmatrix_yale_spec.rb +1 -3
  41. data/spec/shortcuts_spec.rb +26 -36
  42. data/spec/slice_spec.rb +2 -4
  43. metadata +2 -2
@@ -26,6 +26,6 @@ class NMatrix
26
26
  # Note that the format of the VERSION string is needed for NMatrix
27
27
  # native IO. If you change the format, please make sure that native
28
28
  # IO can still understand NMatrix::VERSION.
29
- VERSION = "0.0.5"
29
+ VERSION = "0.0.6"
30
30
  end
31
31
 
@@ -39,33 +39,36 @@ module NMatrix::YaleFunctions
39
39
  end
40
40
 
41
41
  # call-seq:
42
- # yale_nd_row_as_array -> Array
42
+ # yale_ja_at(i) -> Array
43
43
  #
44
44
  # Returns the non-diagonal column indices which are stored in a given row.
45
- def yale_nd_row_as_array i
46
- yale_nd_row(i, :array)
45
+ def yale_ja_at i
46
+ yale_nd_row(i, :keys)
47
47
  end
48
+ alias :yale_nd_row_as_array :yale_ja_at
48
49
 
49
50
  # call-seq:
50
- # yale_nd_row_as_set -> Set
51
+ # yale_ja_set_at(i) -> Set
51
52
  #
52
53
  # Returns the non-diagonal column indices which are stored in a given row, as a Set.
53
- def yale_nd_row_as_set i
54
+ def yale_ja_set_at i
54
55
  require 'set'
55
- yale_nd_row(i, :array).to_set
56
+ yale_nd_row(i, :keys).to_set
56
57
  end
58
+ alias :yale_nd_row_as_set :yale_ja_set_at
57
59
 
58
60
  # call-seq:
59
- # yale_nd_row_as_sorted_set -> SortedSet
61
+ # yale_ja_sorted_set_at -> SortedSet
60
62
  #
61
63
  # Returns the non-diagonal column indices which are stored in a given row, as a Set.
62
- def yale_nd_row_as_sorted_set i
64
+ def yale_ja_sorted_set_at i
63
65
  require 'set'
64
- SortedSet.new(yale_nd_row(i, :array))
66
+ SortedSet.new(yale_nd_row(i, :keys))
65
67
  end
68
+ alias :yale_nd_row_as_sorted_set :yale_ja_sorted_set_at
66
69
 
67
70
  # call-seq:
68
- # yale_nd_row_as_hash -> Hash
71
+ # yale_nd_row_as_hash(i) -> Hash
69
72
  #
70
73
  # Returns the non-diagonal column indices and entries stored in a given row.
71
74
  def yale_nd_row_as_hash i
@@ -73,35 +76,38 @@ module NMatrix::YaleFunctions
73
76
  end
74
77
 
75
78
  # call-seq:
76
- # yale_row_as_array -> Array
79
+ # yale_ja_d_keys_at(i) -> Array
77
80
  #
78
81
  # Returns the diagonal and non-digonal column indices stored in a given row.
79
- def yale_row_as_array i
80
- ary = yale_nd_row(i, :array)
82
+ def yale_ja_d_keys_at i
83
+ ary = yale_nd_row(i, :keys)
81
84
  return ary if i >= self.shape[1] || self[i,i].nil? || self[i,i] == 0
82
85
  ary << i
83
86
  end
87
+ alias :yale_row_as_array :yale_ja_d_keys_at
84
88
 
85
89
  # call-seq:
86
- # yale_row_as_set -> Set
90
+ # yale_ja_d_keys_set_at(i) -> Set
87
91
  #
88
92
  # Returns the diagonal and non-diagonal column indices stored in a given row.
89
- def yale_row_as_set i
93
+ def yale_ja_d_keys_set_at i
90
94
  require 'set'
91
- yale_row_as_array(i).to_set
95
+ yale_ja_d_keys_at(i).to_set
92
96
  end
97
+ alias :yale_row_as_set :yale_ja_d_keys_set_at
93
98
 
94
99
  # call-seq:
95
- # yale_row_as_sorted_set -> SortedSet
100
+ # yale_ja_d_keys_sorted_set_at(i) -> SortedSet
96
101
  #
97
102
  # Returns the diagonal and non-diagonal column indices stored in a given row.
98
- def yale_row_as_sorted_set i
103
+ def yale_ja_d_keys_sorted_set_at i
99
104
  require 'set'
100
105
  SortedSet.new(yale_row_as_array(i))
101
106
  end
107
+ alias :yale_row_as_sorted_set :yale_ja_d_keys_sorted_set_at
102
108
 
103
109
  # call-seq:
104
- # yale_row_as_hash -> Hash
110
+ # yale_row_as_hash(i) -> Hash
105
111
  #
106
112
  # Returns the diagonal and non-diagonal column indices and entries stored in a given row.
107
113
  def yale_row_as_hash i
data/spec/blas_spec.rb CHANGED
@@ -67,23 +67,6 @@ describe NMatrix::BLAS do
67
67
 
68
68
  [:float32, :float64].each do |dtype|
69
69
  context dtype do
70
- it "exposes unfriendly cblas_rot" do
71
- x = NVector.new(5, [1,2,3,4,5], dtype)
72
- y = NVector.new(5, [-5,-4,-3,-2,-1], dtype)
73
- NMatrix::BLAS::cblas_rot(5, x, 1, y, -1, 0.5, Math.sqrt(3)/2)
74
-
75
- x[0].should be_within(1e-4).of(-0.3660254037844386)
76
- x[1].should be_within(1e-4).of(-0.7320508075688772)
77
- x[2].should be_within(1e-4).of(-1.098076211353316)
78
- x[3].should be_within(1e-4).of(-1.4641016151377544)
79
- x[4].should be_within(1e-4).of(-1.8301270189221928)
80
-
81
- y[0].should be_within(1e-4).of(-6.830127018922193)
82
- y[1].should be_within(1e-4).of(-5.464101615137754)
83
- y[2].should be_within(1e-4).of(-4.098076211353316)
84
- y[3].should be_within(1e-4).of(-2.732050807568877)
85
- y[4].should be_within(1e-4).of(-1.3660254037844386)
86
- end
87
70
 
88
71
  it "exposes cblas rot" do
89
72
  x = NVector.new(5, [1,2,3,4,5], dtype)
@@ -103,10 +86,9 @@ describe NMatrix::BLAS do
103
86
  y[4].should be_within(1e-4).of(-1.3660254037844386)
104
87
  end
105
88
 
106
- # FIXME: Need to write new Rational algorithm, which doesn't choke quite so often on irrational square roots (which often eventually cancel).
107
89
  it "exposes cblas rotg" do
108
90
  ab = NVector.new(2, [6,-8], dtype)
109
- c,s = NMatrix::BLAS::cblas_rotg(ab)
91
+ c,s = NMatrix::BLAS::rotg(ab)
110
92
  ab[0].should be_within(1e-6).of(-10)
111
93
  ab[1].should be_within(1e-6).of(-5.quo(3))
112
94
  c.should be_within(1e-6).of(-3.quo(5))
@@ -30,6 +30,95 @@ require File.join(File.dirname(__FILE__), "spec_helper.rb")
30
30
 
31
31
  describe NMatrix do
32
32
 
33
+ context "yale" do
34
+ before :each do
35
+ @n = NMatrix.new(:yale, 3, :int64)
36
+ @m = NMatrix.new(:yale, 3, :int64)
37
+ @n[0,0] = 52
38
+ @n[0,2] = 5
39
+ @n[1,1] = 40
40
+ @n[0,1] = 30
41
+ @n[2,0] = 6
42
+ @m[1,1] = -48
43
+ @m[0,2] = -5
44
+ @n.extend NMatrix::YaleFunctions
45
+ end
46
+
47
+ it "should perform scalar math" do
48
+ x = @n * 3
49
+ x[0,0].should == 52 * 3
50
+ x[0,1].should == 30 * 3
51
+ x[0,2].should == 5 * 3
52
+ x[1,1].should == 40 * 3
53
+ x[2,0].should == 6 * 3
54
+
55
+ r = NMatrix.new(:yale, 3, :int64)
56
+ y = r + 3
57
+ y[0,0].should == 3
58
+ end
59
+
60
+ it "should refuse to perform a dot operation on a yale with non-zero default" do
61
+ r = NMatrix.new(:yale, 3, :int64)
62
+ y = r + 3
63
+ expect { y.dot(r) }.to raise_error
64
+ expect { r.dot(y) }.to raise_error
65
+ end
66
+
67
+ it "should perform element-wise addition" do
68
+ r = NMatrix.new(:dense, 3, [52,30,0,0,-8,0,6,0,0], :int64).cast(:yale, :int64)
69
+ r[0,0] = 52
70
+ r[1,1] = -8
71
+ q = @n + @m
72
+ q.should == r
73
+ end
74
+
75
+ it "should perform element-wise subtraction" do
76
+ (@n-@m).should == NMatrix.new(:dense, 3, [52,30,10,0,88,0,6,0,0], :int64).cast(:yale, :int64)
77
+ end
78
+
79
+ it "should perform element-wise multiplication" do
80
+ r = NMatrix.new(:dense, 3, [0,0,-25,0,-1920,0,0,0,0], :int64).cast(:yale, :int64)
81
+ m = NMatrix.new(:yale, 2, :int64)
82
+ (@n*@m).should == r
83
+ end
84
+
85
+ it "should perform element-wise division" do
86
+ r = NMatrix.new(:dense, 3, [52, 30, -2, 0, -1, 0, 6, 0, 0], :int64).cast(:yale, :int64)
87
+ (@n/(@m+1)).should == r
88
+ end
89
+
90
+ it "should perform element-wise modulo" do
91
+ m = NMatrix.new(:yale, 3, :int64) + 5
92
+ (@n % m).should == NMatrix.new(:dense, 3, [2,0,0,0,0,0,1,0,0], :int64).cast(:yale, :int64)
93
+ end
94
+
95
+ it "should handle element-wise equality (=~)" do
96
+ (@n =~ @m).should == NMatrix.new(:dense, 3, [false,false,false,true,false,true,false,true,true], :object).cast(:yale, :object, false)
97
+ end
98
+
99
+ it "should handle element-wise inequality (!~)" do
100
+ (@n !~ @m).should == NMatrix.new(:dense, 3, [true,true,true,false,true,false,true,false,false], :object).cast(:yale, :object, true)
101
+ end
102
+
103
+ it "should handle element-wise less-than (<)" do
104
+ (@m < @n).should == NMatrix.new(:dense, 3, [true,true,true,false,true,false,true,false,false], :object).cast(:yale, :object, true)
105
+ end
106
+
107
+ it "should handle element-wise greater-than (>)" do
108
+ (@n > @m).should == NMatrix.new(:dense, 3, [true,true,true,false,true,false,true,false,false], :object).cast(:yale, :object, false)
109
+ end
110
+
111
+ it "should handle element-wise greater-than-or-equals (>=)" do
112
+ (@n >= @m).should == NMatrix.new(:dense, 3, true, :object).cast(:yale,:object, true)
113
+ end
114
+
115
+ it "should handle element-wise less-than-or-equals (<=)" do
116
+ r = NMatrix.new(:dense, 3, [false,false,false,true,false,true,false,true,true], :object).cast(:yale, :object, false)
117
+ (@n <= @m).should == r
118
+ end
119
+ end
120
+
121
+
33
122
  context "list" do
34
123
  before :each do
35
124
  @n = NMatrix.new(:list, 2, 0, :int64)
@@ -51,12 +140,15 @@ describe NMatrix do
51
140
  end
52
141
 
53
142
  it "should perform element-wise addition" do
54
- r = NMatrix.new(:dense, 2, [52, 0, 0, -8], :int64).cast(:list, :int64)
55
- (@n+@m).should == r
143
+ r = NMatrix.new(:list, 2, 0, :int64)
144
+ r[0,0] = 52
145
+ r[1,1] = -8
146
+ q = @n + @m
147
+ q.should == r
56
148
  end
57
149
 
58
150
  it "should perform element-wise subtraction" do
59
- r = NMatrix.new(:dense, 2, [52, 0, 0, -88], :int64).cast(:list, :int64)
151
+ r = NMatrix.new(:dense, 2, [52, 0, 0, 88], :int64).cast(:list, :int64)
60
152
  (@n-@m).should == r
61
153
  end
62
154
 
@@ -75,31 +167,48 @@ describe NMatrix do
75
167
  end
76
168
 
77
169
  it "should perform element-wise modulo" do
78
- pending "% operator not yet implemented for matrices"
170
+ m = NMatrix.new(:list, 2, 1, :int64)
171
+ m[0,0] = 50
172
+ m[1,1] = 40
173
+ (@n % m)
79
174
  end
80
175
 
81
176
  it "should handle element-wise equality (=~)" do
82
- (@n =~ @m).cast(:dense, :byte).should == NMatrix.new(:dense, 2, [0, 1, 1, 0], :byte)
177
+ r = NMatrix.new(:list, 2, false, :object)
178
+ r[0,1] = true
179
+ r[1,0] = true
180
+
181
+ (@n =~ @m).should == r
83
182
  end
84
183
 
85
184
  it "should handle element-wise inequality (!~)" do
86
- (@n !~ @m).cast(:dense, :byte).should == NMatrix.new(:dense, 2, [1, 0, 0, 1], :byte)
185
+ r = NMatrix.new(:list, 2, false, :object)
186
+ r[0,0] = true
187
+ r[1,1] = true
188
+
189
+ (@n !~ @m).should == r
87
190
  end
88
191
 
89
192
  it "should handle element-wise less-than (<)" do
90
- (@n < @m).should == NMatrix.new(:list, 2, 0, :byte)
193
+ (@n < @m).should == NMatrix.new(:list, 2, false, :object)
91
194
  end
92
195
 
93
196
  it "should handle element-wise greater-than (>)" do
94
- (@n > @m).should == NMatrix.new(:dense, 2, [1, 0, 0, 1], :byte).cast(:list, :byte)
197
+ r = NMatrix.new(:list, 2, false, :object)
198
+ r[0,0] = true
199
+ r[1,1] = true
200
+ (@n > @m).should == r
95
201
  end
96
202
 
97
203
  it "should handle element-wise greater-than-or-equals (>=)" do
98
- (@n >= @m).cast(:dense, :byte).should == NMatrix.new(:dense, 2, [1, 1, 1, 1], :byte)
204
+ (@n >= @m).should == NMatrix.new(:list, 2, true, :object)
99
205
  end
100
206
 
101
207
  it "should handle element-wise less-than-or-equals (<=)" do
102
- (@n <= @m).cast(:dense, :byte).should == NMatrix.new(:dense, 2, [0, 1, 1, 0], :byte)
208
+ r = NMatrix.new(:list, 2, false, :object)
209
+ r[0,1] = true
210
+ r[1,0] = true
211
+ (@n <= @m).should == r
103
212
  end
104
213
  end
105
214
 
@@ -132,6 +241,12 @@ describe NMatrix do
132
241
  r.should == NMatrix.new(:dense, [2,2], [-1, -2, 1, 0], :int64)
133
242
  end
134
243
 
244
+ #it "exponentiates" do
245
+ # r = @n ** 2
246
+ # # TODO: We might have problems with the dtype.
247
+ # r.should == NMatrix.new(:dense, [2,2], [1, 4, 9, 16], :int64)
248
+ #end
249
+
135
250
  it "modulo" do
136
251
  pending "% operator not yet implemented"
137
252
  r = @n % @m
@@ -147,33 +262,33 @@ describe NMatrix do
147
262
 
148
263
  it "equals" do
149
264
  r = @n =~ @m
150
- r.should == NMatrix.new(:dense, [2,2], [0, 0, 1, 0], :byte)
265
+ r.should == NMatrix.new(:dense, [2,2], [false, false, true, false], :object)
151
266
  end
152
267
 
153
268
  it "is not equal" do
154
269
  r = @n !~ @m
155
- r.should == NMatrix.new(:dense, [2,2], [1, 1, 0, 1], :byte)
270
+ r.should == NMatrix.new(:dense, [2,2], [true, true, false, true], :object)
156
271
  end
157
272
 
158
273
  it "is less than" do
159
274
  r = @n < @m
160
- r.should == NMatrix.new(:dense, [2,2], 0, :byte)
275
+ r.should == NMatrix.new(:dense, [2,2], false, :object)
161
276
  end
162
277
 
163
278
  it "is greater than" do
164
279
  r = @n > @m
165
- r.should == NMatrix.new(:dense, [2,2], [1, 1, 0, 1], :byte)
280
+ r.should == NMatrix.new(:dense, [2,2], [true, true, false, true], :object)
166
281
  end
167
282
 
168
283
  it "is less than or equal to" do
169
284
  r = @n <= @m
170
- r.should == NMatrix.new(:dense, [2,2], [0, 0, 1, 0], :byte)
285
+ r.should == NMatrix.new(:dense, [2,2], [false, false, true, false], :object)
171
286
  end
172
287
 
173
288
  it "is greater than or equal to" do
174
- n = NMatrix.new(:dense, [2,2], [ 1, 2, 2, 4], :int64)
289
+ n = NMatrix.new(:dense, [2,2], [1, 2, 2, 4], :int64)
175
290
  r = n >= @m
176
- r.should == NMatrix.new(:dense, [2,2], [1, 1, 0, 1], :byte)
291
+ r.should == NMatrix.new(:dense, [2,2], [true, true, false, true], :object)
177
292
  end
178
293
  end
179
294
  end
data/spec/lapack_spec.rb CHANGED
@@ -67,9 +67,6 @@ describe NMatrix::LAPACK do
67
67
  a[2,0].should == 1 # 3.quo(8)
68
68
  a[2,1].should be_within(err).of(52.quo(9))
69
69
  a[2,2].should be_within(err).of(360.quo(53))
70
- # FIXME: these are rounded, == won't work
71
- #a[2,1].should == 0.544118
72
- #a[2,2].should == 5.294118
73
70
  end
74
71
 
75
72
  it "exposes clapack potrf" do
@@ -43,6 +43,24 @@ describe NMatrix do
43
43
  n.should == m
44
44
  end
45
45
 
46
+ it "should compare 0-1 matrices with different default values with ==" do
47
+ n = NMatrix.new(:list, 2, 0, :object)
48
+ n[0,1] = 1
49
+ n[1,0] = 1
50
+
51
+ m = NMatrix.new(:list, 2, 1, :object)
52
+ m[0,0] = 0
53
+ m[1,1] = 0
54
+
55
+ n.should == m
56
+ end
57
+
58
+ it "should allow creation of both true- and false-based matrix" do
59
+ r1 = NMatrix.new(:list, 2, false, :object)
60
+ r2 = NMatrix.new(:list, 2, true, :object)
61
+ r1.should_not == r2
62
+ end
63
+
46
64
  it "should handle missing default value" do
47
65
  NMatrix.new(:list, 3, :int8)[0,0].should == 0
48
66
  NMatrix.new(:list, 4, :float64)[0,0].should == 0.0
data/spec/nmatrix_spec.rb CHANGED
@@ -31,7 +31,7 @@ describe NMatrix do
31
31
 
32
32
  it "calculates exact determinants on small square matrices" do
33
33
  a = NMatrix.new(:dense, 2, [1,2,3,4], :int64)
34
- x = a.det_exact
34
+ a.det_exact.should == -2
35
35
  end
36
36
 
37
37
  it "calculates determinants" do
@@ -39,11 +39,23 @@ describe NMatrix do
39
39
  m.det.should == 6
40
40
  end
41
41
 
42
+ it "allows casting to Ruby objects" do
43
+ m = NMatrix.new(:dense, [3,3], [0,0,1,0,2,0,3,4,5], :int64)
44
+ n = m.cast(:dense, :object)
45
+ n.should == m
46
+ end
47
+
48
+ it "allows casting from Ruby objects" do
49
+ m = NMatrix.new(:dense, [3,3], [0,0,1,0,2,0,3,4,5], :object)
50
+ n = m.cast(:dense, :int64)
51
+ m.should == n
52
+ end
53
+
42
54
  it "allows stype casting of a dim 2 matrix between dense, sparse, and list (different dtypes)" do
43
55
  m = NMatrix.new(:dense, [3,3], [0,0,1,0,2,0,3,4,5], :int64).
44
56
  cast(:yale, :int32).
45
57
  cast(:dense, :float64).
46
- cast(:list, :int32).
58
+ cast(:list, :object).
47
59
  cast(:dense, :int16).
48
60
  cast(:list, :int32).
49
61
  cast(:yale, :int64) #.
@@ -185,14 +197,31 @@ describe NMatrix do
185
197
  c = dtype == :object ? "Ruby object" : "non-Ruby object"
186
198
  context c do
187
199
  it "allows iteration of matrices" do
188
- pending("yale and list not implemented yet") unless storage_type == :dense
189
- n = NMatrix.new(:dense, [3,3], [1,2,3,4,5,6,7,8,9], dtype)
200
+ n = nil
201
+ if storage_type == :dense
202
+ n = NMatrix.new(:dense, [3,3], [1,2,3,4,5,6,7,8,9], dtype)
203
+ else
204
+ n = storage_type == :yale ? NMatrix.new(storage_type, [3,4], dtype) : NMatrix.new(storage_type, [3,4], 0, dtype)
205
+ n[0,0] = 1
206
+ n[0,1] = 2
207
+ n[2,3] = 4
208
+ n[2,0] = 3
209
+ end
210
+ ary = []
190
211
  n.each do |x|
191
- puts x
212
+ ary << x
213
+ end
214
+
215
+ if storage_type == :dense
216
+ ary.should == [1,2,3,4,5,6,7,8,9]
217
+ else
218
+ ary.should == [1,2,0,0,0,0,0,0,3,0,0,4]
192
219
  end
193
220
  end
194
221
 
195
222
  it "allows storage-based iteration of matrices" do
223
+ STDERR.puts storage_type.inspect
224
+ STDERR.puts dtype.inspect
196
225
  n = storage_type == :yale ? NMatrix.new(storage_type, [3,3], dtype) : NMatrix.new(storage_type, [3,3], 0, dtype)
197
226
  n[0,0] = 1
198
227
  n[0,1] = 2
@@ -297,7 +326,7 @@ describe NMatrix do
297
326
  val = (a.each { })
298
327
  val.should eq a
299
328
  end
300
-
329
+
301
330
  it "should return the matrix being iterated over when each_stored_with_indices is called with a block" do
302
331
  a = NMatrix.new(2,1)
303
332
  val = (a.each_stored_with_indices { })
@@ -321,13 +350,13 @@ describe NMatrix do
321
350
 
322
351
  end
323
352
  end
324
-
353
+
325
354
  it "should iterate through element 256 without a segfault" do
326
355
  t = NVector.random(256)
327
356
  t.each { |x| x + 0 }
328
357
  end
329
358
 
330
- context "mapping and reduction related functions" do
359
+ context "mapping and reduction related functions" do
331
360
 
332
361
  before :each do
333
362
  @nm_1d = N[5.0,0.0,1.0,2.0,3.0]
@@ -344,7 +373,7 @@ describe NMatrix do
344
373
  @nm_2d.mean.should eq N[[1.0,2.0]]
345
374
  end
346
375
 
347
- it "should calculate the minimum along the specified dimension" do
376
+ it "should calculate the minimum along the specified dimension" do
348
377
  @nm_1d.min.should eq 0.0
349
378
  @nm_2d.min.should eq N[[0.0, 1.0]]
350
379
  @nm_2d.min(1).should eq N[[0.0], [2.0]]
@@ -370,11 +399,11 @@ describe NMatrix do
370
399
  @nm_2d.std(1).should eq N[[Math.sqrt(0.5)], [Math.sqrt(0.5)]]
371
400
  end
372
401
 
373
- it "should raise an ArgumentError when any invalid dimension is provided" do
402
+ it "should raise an ArgumentError when any invalid dimension is provided" do
374
403
  expect { @nm_1d.mean(3) }.to raise_exception(ArgumentError)
375
404
  end
376
405
 
377
- it "should convert to float if it contains only a single element" do
406
+ it "should convert to float if it contains only a single element" do
378
407
  N[4.0].to_f.should eq 4.0
379
408
  N[[[[4.0]]]].to_f.should eq 4.0
380
409
  end
@@ -383,7 +412,7 @@ describe NMatrix do
383
412
  expect { @nm_1d.to_f }.to raise_error(IndexError)
384
413
  end
385
414
 
386
- it "should map a block to all elements" do
415
+ it "should map a block to all elements" do
387
416
  @nm_1d.map { |e| e ** 2 }.should eq N[25.0,0.0,1.0,4.0,9.0]
388
417
  @nm_2d.map { |e| e ** 2 }.should eq N[[0.0,1.0],[4.0,9.0]]
389
418
  end
@@ -478,12 +507,12 @@ describe NMatrix do
478
507
 
479
508
  it "should convert integer dtypes to float when calculating variance" do
480
509
  m = N[[1,2,3], [3,4,5], :int32]
481
- m.mean(0).dtype.should eq :float64
510
+ m.variance(0).dtype.should eq :float64
482
511
  end
483
512
 
484
513
  it "should convert integer dtypes to float when calculating standard deviation" do
485
514
  m = N[[1,2,3], [3,4,5], :int32]
486
- m.mean(0).dtype.should eq :float64
515
+ m.std(0).dtype.should eq :float64
487
516
  end
488
517
 
489
518
  context "_like constructors" do
@@ -493,13 +522,10 @@ describe NMatrix do
493
522
  NMatrix.ones_like(@nm_2d).should eq N[[1.0, 1.0], [1.0, 1.0]]
494
523
  end
495
524
 
496
- it "should create an nmatrix of zeros with dimensions and type the same as its argument" do
525
+ it "should create an nmatrix of zeros with dimensions and type the same as its argument" do
497
526
  NMatrix.zeros_like(@nm_1d).should eq N[0.0, 0.0, 0.0, 0.0, 0.0]
498
527
  NMatrix.zeros_like(@nm_2d).should eq N[[0.0, 0.0], [0.0, 0.0]]
499
528
  end
500
-
501
529
  end
502
-
503
530
  end
504
-
505
531
  end