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

Function dependencies

6 Source Code

File: inst/include/hdf5Utilities/hdf5DiagonalMethods.hppLines 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(...);