lib/eigen.rb in ruby-eigen-0.0.10 vs lib/eigen.rb in ruby-eigen-0.0.11.pre1
- old
+ new
@@ -14,10 +14,11 @@
col_size = ms.inject(0){|sum, m| m.cols + sum }
row_size = ms[0].rows
ret = new(row_size, col_size)
col_ind = 0
ms.each{|m|
+ raise Eigen::EigenRuntimeError, "row sizes are different" unless row_size == m.rows
ret[0,col_ind] = m
col_ind += m.cols
}
return ret
end
@@ -26,10 +27,11 @@
row_size = ms.inject(0){|sum, m| m.rows + sum }
col_size = ms[0].cols
ret = new(row_size, col_size)
row_ind = 0
ms.each{|m|
+ raise Eigen::EigenRuntimeError, "col sizes are different" unless col_size == m.cols
ret[row_ind,0] = m
row_ind += m.rows
}
return ret
end
@@ -165,6 +167,39 @@
end
class Eigen::VectorComplex
extend Eigen::VectorConstructor
include Eigen::VectorCommon
+end
+
+module Eigen::SpMatrixCommon
+
+ def setFromTriplet(arry)
+ arry0 = arry.sort{|a, b|
+ ret = a[1] <=> b[1]
+ ret == 0 ? a[0] <=> b[0] : ret
+ }
+ each_col_size = Array.new(cols(), 0)
+ arry0.slice_when{|a, b| a[1] != b[1] }.each{|e|
+ each_col_size[ e[0][1] ] = e.size
+ }
+ reserve( each_col_size )
+ arry0.each{|e|
+ __insert__(e[0], e[1], e[2])
+ }
+ end
+
+ def reserve( arg )
+ if arg.respond_to?(:to_int)
+ return __reserve__( arg )
+ end
+ raise Eigen::EigenRuntimeError unless arg.size == cols()
+ __reserve__( arg )
+ end
+
+end
+
+
+class Eigen::SpMatrixDouble
+ include Eigen::SpMatrixCommon
+ private "__reserve__", "__insert__"
end