From b6820b015c1a2767916e3d894cd9cd76d67b94b9 Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Thu, 16 Jul 2015 15:51:20 +0200 Subject: SparseVector: norm, unit --- lib/zipf/SparseVector.rb | 15 +++++++++++++++ test/test_sparsevector.rb | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100755 test/test_sparsevector.rb diff --git a/lib/zipf/SparseVector.rb b/lib/zipf/SparseVector.rb index 5d219b8..976ecaf 100644 --- a/lib/zipf/SparseVector.rb +++ b/lib/zipf/SparseVector.rb @@ -199,5 +199,20 @@ class SparseVector < Hash mean.each_pair { |k,v| mean[k] = v/n } return mean end + + def norm + return Math.sqrt(self.dot(self)) + end + + def unit! + n = self.norm + self.each_pair { |k,v| + self[k] /= n + } + end + + def unit + return SparseVector.new(self).unit! + end end diff --git a/test/test_sparsevector.rb b/test/test_sparsevector.rb new file mode 100755 index 0000000..a23a7d3 --- /dev/null +++ b/test/test_sparsevector.rb @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +require_relative '../lib/zipf/SparseVector' +require 'test/unit' + +class TestSparseVector < Test::Unit::TestCase + + def test_unit + v = SparseVector.new + v[:a] = 1 + v[:b] = 2 + v[:c] = 3 + assert_equal Math.sqrt(1**2+2**2+3**2), v.norm + v.unit! + assert_equal v.norm, 1.0 + end +end + -- cgit v1.2.3