extractDiagonalToVector
C++ Function Reference
1 Signature
void BigDataStatMeth::DiagonalOps::extractDiagonalToVector(BigDataStatMeth::hdf5Dataset *dsMatrix, BigDataStatMeth::hdf5Dataset *dsVector)2 Description
Extract diagonal from matrix and save as vector dataset.
3 Parameters
dsMatrix(BigDataStatMeth::hdf5Dataset *): Input matrix dataset (must be square N×N)dsVector(BigDataStatMeth::hdf5Dataset *): Output vector dataset (will be created as 1×N)
4 Details
Extracts diagonal elements from a matrix and creates a new vector dataset. Uses existing getDiagonalfromMatrix() function for optimized diagonal reading. The result vector is stored in 1×N format for compatibility with vector operations.
5 Call Graph
6 Source Code
NoteImplementation
File: inst/include/hdf5Utilities/hdf5DiagonalMethods.hpp • Lines 139-164
inline void extractDiagonalToVector(BigDataStatMeth::hdf5Dataset* dsMatrix,
BigDataStatMeth::hdf5Dataset* dsVector)
{
try {
if (dsMatrix->nrows() != dsMatrix->ncols()) {
Rf_error("extractDiagonalToVector: Matrix must be square");
return;
}
hsize_t matrix_size = dsMatrix->nrows();
// Extract diagonal using existing function
Rcpp::NumericVector diagonal = getDiagonalfromMatrix(dsMatrix);
// Create vector dataset (1×N format)
dsVector->createDataset(matrix_size, 1, "numeric");
// Write diagonal data
std::vector<double> diag_vector = Rcpp::as<std::vector<double>>(diagonal);
std::vector<hsize_t> stride = {1, 1}, block = {1, 1};
dsVector->writeDatasetBlock(diag_vector, {0, 0}, {1, matrix_size}, stride, block);
} catch(std::exception& ex) {
Rf_error("Error in extractDiagonalToVector: %s", ex.what());
}
}7 Usage Example
#include "BigDataStatMeth.hpp"
// Example usage
auto result = extractDiagonalToVector(...);