| Class | Vector |
| In: |
aprl/base/ap_lina.rb
|
| Parent: | Array |
# File aprl/base/ap_lina.rb, line 52 def Vector.add(x,y) z=Vector.new y.length.times do |i| z.push x[i].to_f+y[i].to_f end z end
# File aprl/base/ap_lina.rb, line 236 def Vector.from_angle(a) z = Vector.new(2) z[0]=Math.cos(a) z[1]=Math.sin(a) z end
# File aprl/base/ap_lina.rb, line 68 def Vector.mul(x,y) z=0.0 y.length.times do |i| z=z+x[i].to_f*y[i].to_f end z end
# File aprl/base/ap_lina.rb, line 76 def Vector.scale(x,f) z=Vector.new x.length.times do |i| z.push x[i].to_f*f.to_f end z end
# File aprl/base/ap_lina.rb, line 60 def Vector.sub(x,y) z=Vector.new y.length.times do |i| z.push x[i].to_f-y[i].to_f end z end
# File aprl/base/ap_lina.rb, line 116 def *(y) if y.kind_of?(Array) Vector.mul(self,y) else Vector.scale(self,y) end end
angle between vectors
# File aprl/base/ap_lina.rb, line 299 def angle_to(x) Math.acos(norm()*(x.norm)) end
# File aprl/base/ap_lina.rb, line 194 def collect_together(o) ret=Vector.new each_index do |i| break if i>o.length ret.push(yield(self[i],o[i])) end ret end
# File aprl/base/ap_lina.rb, line 219 def collect_together!(v,w) each_index do |i| break if i>o.length self[i]=yield(v[i],w[i]) end self end
# File aprl/base/ap_lina.rb, line 211 def collect_together!(o) each_index do |i| break if i>o.length self[i]=yield(self[i],o[i]) end self end
parallel iteration, allows for easy convolution realize u=vXw as u = v.convolve(w), give block for other parallel calculation e.g. u*w = v.convolve(w,0.0) { |vi,wi,sum| sum+vi*wi }
# File aprl/base/ap_lina.rb, line 154 def convolve(other,start_value=0.0) result = start_value if block_given? each_iv do |index,value| break if index>other.length result=yield(value,other[index],result) end else each_iv do |index,value| break if index>other.length result=result+value*o[index] end end result end
yield index, value
# File aprl/base/ap_lina.rb, line 145 def each_iv length.times { |i| yield i,self[i] } end
enum togetor wit other vector o
# File aprl/base/ap_lina.rb, line 180 def each_together(o) each_iv do |i,v| yield(v,o[i]) end end
# File aprl/base/ap_lina.rb, line 203 def equals?(o) each_index do |i| return false if i>o.length return false if self[i]!=o[i] end return true end
collect, yielding index
# File aprl/base/ap_lina.rb, line 135 def index_collect z = Vector.new; length.times { |i| z.push yield(i) }; z end
collect, yielding index
# File aprl/base/ap_lina.rb, line 129 def index_collect! length.times { |i| self[i]=yield(i) } self end
collect, yielding index, value
# File aprl/base/ap_lina.rb, line 140 def iv_collect z = Vector.new; length.times { |i| z.push yield(i,self[i]) }; z end
# File aprl/base/ap_lina.rb, line 286 def sub(y) y.length.times do |i| self[i] = self[i].to_f-y[i].to_f end self end
sumarize, yielding index, value
# File aprl/base/ap_lina.rb, line 171 def sum_iv z = 0.0 each_iv do |i,v| z=z+yield(i,v) end z end