16 template <
typename T,
typename indexT,
bool columnMajor>
20 template <
typename T,
typename indexT,
bool columnMajor>
24 template <
typename T,
typename indexT,
bool columnMajor>
28 template <
typename T,
typename indexT,
bool columnMajor>
32 template <
typename T,
typename indexT,
bool columnMajor>
36 template <
typename T,
typename indexT,
bool columnMajor>
40 assert((vec < outerDim && vec >= 0) &&
"Vector index out of bounds");
51 template <
typename T,
typename indexT,
bool columnMajor>
55 FILE *fp = fopen(filename,
"wb");
58 fwrite(metadata,
sizeof(uint32_t), NUM_META_DATA, fp);
61 fwrite(vals,
sizeof(T), nnz, fp);
64 fwrite(innerIdx,
sizeof(indexT), nnz, fp);
67 fwrite(outerPtr,
sizeof(indexT), outerDim + 1, fp);
74 template <
typename T,
typename indexT,
bool columnMajor>
76 std::cout << std::endl;
77 std::cout <<
"IVSparse Matrix" << std::endl;
80 if (numRows < 100 && numCols < 100) {
82 for (uint32_t i = 0; i < numRows; i++) {
83 for (uint32_t j = 0; j < numCols; j++) { std::cout <<
coeff(i, j) <<
" "; }
84 std::cout << std::endl;
86 }
else if (numRows >= 100 && numCols >= 100) {
88 for (uint32_t i = 0; i < 100; i++) {
89 for (uint32_t j = 0; j < 100; j++) { std::cout <<
coeff(i, j) <<
" "; }
90 std::cout << std::endl;
96 template <
typename T,
typename indexT,
bool columnMajor>
106 template <
typename T,
typename indexT,
bool columnMajor>
116 template <
typename T,
typename indexT,
bool columnMajor>
119 Eigen::SparseMatrix<T, columnMajor ? Eigen::ColMajor : Eigen::RowMajor> eigenMat(numRows, numCols);
122 if (nnz == 0) {
return eigenMat; }
125 for (uint32_t i = 0; i < outerDim; i++) {
126 for (indexT j = outerPtr[i]; j < outerPtr[i + 1]; j++) {
127 eigenMat.insert(innerIdx[j], i) = vals[j];
138 template <
typename T,
typename indexT,
bool columnMajor>
141 Eigen::SparseMatrix<T> eigenMat = (*this).toEigen();
144 eigenMat = eigenMat.transpose();
154 template <
typename T,
typename indexT,
bool columnMajor>
157 Eigen::SparseMatrix<T> eigenMat = (*this).toEigen();
160 eigenMat = eigenMat.transpose();
167 template <
typename T,
typename indexT,
bool columnMajor>
171 if (columnMajor) { numCols++; }
175 metadata[2] = outerDim;
180 vals = (T *)realloc(vals,
sizeof(T) * nnz);
181 innerIdx = (indexT *)realloc(innerIdx,
sizeof(indexT) * nnz);
182 outerPtr = (indexT *)realloc(outerPtr,
sizeof(indexT) * (outerDim + 1));
183 }
catch (std::bad_alloc &ba) {
184 std::cerr <<
"Error: " << ba.what() << std::endl;
189 memcpy(vals + (nnz - vec.
nonZeros()), vec.getValues(),
sizeof(T) * vec.
nonZeros());
190 memcpy(innerIdx + (nnz - vec.
nonZeros()), vec.getInnerIndices(),
sizeof(indexT) * vec.
nonZeros());
193 outerPtr[outerDim] = nnz;
197 outerPtr[outerDim - 1] = nnz;
206 template <
typename T,
typename indexT,
bool columnMajor>
210 assert(start < outerDim && end <= outerDim && start < end &&
"Invalid start and end values!");
214 std::vector<typename IVSparse::SparseMatrix<T, indexT, 1, columnMajor>::Vector> vecs(end - start);
217 for (uint32_t i = start; i < end; ++i) {
222 vecs[i - start] = temp;
Definition: IVCSC_Vector.hpp:27
uint32_t nonZeros()
Definition: IVCSC_Vector_Methods.hpp:163
Definition: CSC_SparseMatrix.hpp:24
Definition: VCSC_SparseMatrix.hpp:22
Definition: IVCSC_SparseMatrix.hpp:27
IVSparse::SparseMatrix< T, indexT, 2, columnMajor > toVCSC()
Definition: IVCSC_Methods.hpp:116
IVSparse::SparseMatrix< T, indexT, compressionLevel, columnMajor >::Vector getVector(uint32_t vec)
Definition: IVCSC_Methods.hpp:29
IVSparse::SparseMatrix< T, indexT, compressionLevel, columnMajor > transpose()
Definition: IVCSC_Methods.hpp:269
void append(typename SparseMatrix< T, indexT, compressionLevel, columnMajor >::Vector &vec)
Definition: IVCSC_Methods.hpp:202
T coeff(uint32_t row, uint32_t col)
Definition: IVCSC_Methods.hpp:17
void write(const char *filename)
Definition: IVCSC_Methods.hpp:42
void print()
Definition: IVCSC_Methods.hpp:64
Eigen::SparseMatrix< T, columnMajor ? Eigen::ColMajor :Eigen::RowMajor > toEigen()
Definition: IVCSC_Methods.hpp:169
bool isColumnMajor() const
Definition: IVCSC_Methods.hpp:21
std::vector< typename IVSparse::SparseMatrix< T, indexT, compressionLevel, columnMajor >::Vector > slice(uint32_t start, uint32_t end)
Definition: IVCSC_Methods.hpp:350
void inPlaceTranspose()
Definition: IVCSC_Methods.hpp:311