diff --git a/lib/matrix.rb b/lib/matrix.rb index fb98d09323c874..3b31642517dc1c 100644 --- a/lib/matrix.rb +++ b/lib/matrix.rb @@ -1713,6 +1713,7 @@ def ** (other) # * #norm # * #normalize # * #r +# * #round # * #size # # Conversion to other data types: @@ -1790,6 +1791,13 @@ def []=(i, v) alias set_component []= private :[]=, :set_element, :set_component + # Returns a vector with entries rounded to the given precision + # (see Float#round) + # + def round(ndigits=0) + map{|e| e.round(ndigits)} + end + # # Returns the number of elements in the vector. # diff --git a/test/matrix/test_matrix.rb b/test/matrix/test_matrix.rb index 3fdef3b314b7c4..7f058abe37bec0 100644 --- a/test/matrix/test_matrix.rb +++ b/test/matrix/test_matrix.rb @@ -190,6 +190,12 @@ def o.to_ary; [1,2,3]; end assert_equal(@m1, Matrix[o, [4,5,6]]) end + def test_round + a = Matrix[[1.0111, 2.32320, 3.04343], [4.81, 5.0, 6.997]] + b = Matrix[[1.01, 2.32, 3.04], [4.81, 5.0, 7.0]] + assert_equal(a.round(2), b) + end + def test_rows assert_equal(@m1, Matrix.rows([[1, 2, 3], [4, 5, 6]])) end diff --git a/test/matrix/test_vector.rb b/test/matrix/test_vector.rb index 3275310b428c80..77fc68dd2b8669 100644 --- a/test/matrix/test_vector.rb +++ b/test/matrix/test_vector.rb @@ -157,6 +157,10 @@ def test_r assert_equal(5, Vector[3, 4].r) end + def test_round + assert_equal(Vector[1.234, 2.345, 3.40].round(2), Vector[1.23, 2.35, 3.4]) + end + def test_covector assert_equal(Matrix[[1,2,3]], @v1.covector) end