Sparsity vertcat(const Sparsity & a, const Sparsity & b) { if(a.isVector()){ Sparsity ret = a; ret.append(b); return ret; } else { Sparsity ret = a.T(); ret.appendColumns(b.T()); return ret.T(); } }
std::vector<Sparsity> vertsplit(const Sparsity& sp, const std::vector<int>& offset){ std::vector<Sparsity> ret = horzsplit(sp.T(),offset); for(std::vector<Sparsity>::iterator it=ret.begin(); it!=ret.end(); ++it){ *it = it->T(); } return ret; }
Sparsity vertcat(const std::vector<Sparsity> & sp) { if(sp.empty()){ return Sparsity(); } else if(sp[0].isVector()){ Sparsity ret = sp[0]; for(int i=1; i<sp.size(); ++i) { ret.append(sp[i]); } return ret; } else { Sparsity ret = sp[0].T(); for(int i=1; i<sp.size(); ++i) { ret.appendColumns(sp[i].T()); } return ret.T(); } }
Sparsity mul(const Sparsity& a, const Sparsity &b) { return b.patternProduct(a.T()); }