writeDiagonalFromVector
C++ Function Reference
1 Signature
void BigDataStatMeth::DiagonalOps::writeDiagonalFromVector(BigDataStatMeth::hdf5Dataset *dsVector, BigDataStatMeth::hdf5Dataset *dsMatrix)2 Description
Write diagonal vector to matrix diagonal.
3 Parameters
dsVector(BigDataStatMeth::hdf5Dataset *): Input vector dataset containing diagonal values (1×N or N×1)dsMatrix(BigDataStatMeth::hdf5Dataset *): Target matrix dataset (must exist and be square N×N)
4 Details
Takes a vector dataset and writes its values to the diagonal of a matrix. Uses existing setDiagonalMatrix() function for optimized diagonal writing. Matrix must already exist and be square. Vector must match matrix diagonal size.
5 Call Graph
6 Source Code
NoteImplementation
File: inst/include/hdf5Utilities/hdf5DiagonalMethods.hpp • Lines 188-228
inline void writeDiagonalFromVector(BigDataStatMeth::hdf5Dataset* dsVector,
BigDataStatMeth::hdf5Dataset* dsMatrix)
{
try {
if (dsMatrix->nrows() != dsMatrix->ncols()) {
Rf_error("writeDiagonalFromVector: Matrix must be square");
return;
}
hsize_t vector_size = validateVectorDataset(dsVector);
hsize_t matrix_size = dsMatrix->nrows();
if (vector_size == 0) {
Rf_error("writeDiagonalFromVector: Input is not a valid vector");
return;
}
if (vector_size != matrix_size) {
Rf_error("writeDiagonalFromVector: Vector size (%llu) must match matrix diagonal size (%llu)",
vector_size, matrix_size);
return;
}
// Read vector data
std::vector<hsize_t> stride = {1, 1}, block = {1, 1};
std::vector<double> vector_data(vector_size);
if (dsVector->nrows() == 1) {
dsVector->readDatasetBlock({0, 0}, {1, vector_size}, stride, block, vector_data.data());
} else {
dsVector->readDatasetBlock({0, 0}, {vector_size, 1}, stride, block, vector_data.data());
}
// Write using existing function
Rcpp::NumericVector diagonal_values = Rcpp::wrap(vector_data);
setDiagonalMatrix(dsMatrix, diagonal_values);
} catch(std::exception& ex) {
Rf_error("Error in writeDiagonalFromVector: %s", ex.what());
}
}7 Usage Example
#include "BigDataStatMeth.hpp"
// Example usage
auto result = writeDiagonalFromVector(...);