named_vector 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/named_vector.rb +37 -8
- data/specs/initialization.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTIyYTE5Y2VlODc2OTY2Y2I4Yjc3YjhmY2FjNzA5MjhjMGI4OWJkMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmMxMGI2ZDg0MmYyMWU3NzJhM2FmMjNkODI2NTliY2Y2NjI3MTM2Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmY3NDRhYjY5MWZjOWNmYzMyNTkwZjIyMjA0M2FiNDI4NzJjYWUwNjM0YTQ1
|
10
|
+
ZTZkODQ4YjJlY2VmMmIwMDIxNTYxZmZiN2U2ZGU5MTYxN2JiYzlmMjQwZDFm
|
11
|
+
MjM1MDNkN2EzYWM1NDk2ZTA2ZGZjYjQ2MTZlNDE2ODBkZTczNjk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmUzMDczMjZjOTNlNzU2ZmJlNDRjOTA1MzRkNDM5NzA1MWVlZDQzYjQzYjBj
|
14
|
+
MGZiZmY1NDkxNWRjMzJlOTgyZGI5N2Q0NTlmZDRhNGI1MDdmOGE2MDMyOWRk
|
15
|
+
MDM1Mzc2OTA3MzRhMjFiYzI3MmJlZDY3YzE0ZTJhYmYxZTllZTY=
|
data/lib/named_vector.rb
CHANGED
@@ -141,6 +141,27 @@ class NamedVector
|
|
141
141
|
norm
|
142
142
|
end
|
143
143
|
|
144
|
+
def eql?(other)
|
145
|
+
false unless other.keys == @keys
|
146
|
+
all_keys = other.keys.merge(@keys)
|
147
|
+
all_keys.each do |key|
|
148
|
+
if other[key] != self[key] then return false end
|
149
|
+
end
|
150
|
+
true
|
151
|
+
end
|
152
|
+
|
153
|
+
def to_s
|
154
|
+
"<#NamedVector @keys=\"#{@keys.inspect}\", @vector=\"#{@vector.inspect}\">"
|
155
|
+
end
|
156
|
+
|
157
|
+
def to_a
|
158
|
+
@vector.to_a
|
159
|
+
end
|
160
|
+
|
161
|
+
alias :to_ary :to_a
|
162
|
+
|
163
|
+
alias :== :eql?
|
164
|
+
|
144
165
|
# the Euclidean norm of a vector
|
145
166
|
def norm
|
146
167
|
Math.sqrt(squared_norm)
|
@@ -150,21 +171,29 @@ class NamedVector
|
|
150
171
|
def normalize
|
151
172
|
current_norm = norm
|
152
173
|
if current_norm > 0 then self*(1.0/current_norm) end
|
174
|
+
self
|
153
175
|
end
|
154
176
|
|
155
|
-
# Mongo
|
156
|
-
|
157
|
-
|
177
|
+
# Mongo retrieval
|
178
|
+
# @param doc [BSON::OrderedHash] the mongo document to retrieve the vector from.
|
179
|
+
def self.to_mongo(hash)
|
180
|
+
if hash.is_a?(Hash) then hash
|
181
|
+
else
|
182
|
+
{"keys"=> hash.keys.to_a, "dimensions" => hash.keys.map {|i| hash[i]}}
|
183
|
+
end
|
158
184
|
end
|
159
185
|
|
160
|
-
# Mongo
|
186
|
+
# Mongo conversion
|
161
187
|
# @param doc [BSON::OrderedHash] the mongo document to retrieve the vector from.
|
162
188
|
def self.from_mongo(doc)
|
163
|
-
|
164
|
-
|
165
|
-
hash
|
189
|
+
if doc.is_a?(self) then doc
|
190
|
+
else
|
191
|
+
hash = {}
|
192
|
+
doc["keys"].each_with_index do |k, index|
|
193
|
+
hash[k] = doc["dimensions"][index]
|
194
|
+
end
|
195
|
+
NamedVector.new(hash)
|
166
196
|
end
|
167
|
-
self.new hash
|
168
197
|
end
|
169
198
|
|
170
199
|
private :new_dimension
|
data/specs/initialization.rb
CHANGED