#include "daal.h"
#include "service.h"
using namespace daal;
int main()
{
std::cout << "Compressed spares rows (CSR) numeric table example" << std::endl << std::endl;
const size_t nObservations = 5;
const size_t nFeatures = 5;
const size_t firstReadRow = 1;
const size_t nRead = 3;
double values[] = {1, -1, -3, -2, 5, 4, 6, 4, -4, 2, 7, 8, -5};
size_t colIndices[] = {1, 2, 4, 1, 2, 3, 4, 5, 1, 3, 4, 2, 5};
size_t rowOffsets[] = {1, 4, 6, 9, 12, 14};
CSRNumericTable dataTable(values, colIndices, rowOffsets, nFeatures, nObservations);
BlockDescriptor<double> block;
dataTable.getBlockOfRows(firstReadRow, nRead, readOnly, block);
std::cout << block.getNumberOfRows() << " rows are read" << std::endl << std::endl;
printArray<double>(block.getBlockPtr(), nFeatures, block.getNumberOfRows(),
"Print 3 rows from CSR data array as dense double array:");
dataTable.releaseBlockOfRows(block);
CSRBlockDescriptor<float> csrBlock;
dataTable.getSparseBlock(firstReadRow, nRead, readWrite, csrBlock);
float *valuesBlock = csrBlock.getBlockValuesPtr();
size_t nValuesInBlock = csrBlock.getDataSize();
printArray<float>(valuesBlock, nValuesInBlock, 1,
"Values in 3 rows from CSR data array:");
printArray<size_t>(csrBlock.getBlockColumnIndicesPtr(), nValuesInBlock, 1,
"Columns indices in 3 rows from CSR data array:");
printArray<size_t>(csrBlock.getBlockRowIndicesPtr(), nRead + 1, 1,
"Rows offsets in 3 rows from CSR data array:");
for (size_t i = 0; i < nValuesInBlock; i++)
{
valuesBlock[i] = -(1.0f + i);
}
dataTable.releaseSparseBlock(csrBlock);
dataTable.getBlockOfRows(firstReadRow, nRead, readOnly, block);
std::cout << block.getNumberOfRows() << " rows are read" << std::endl << std::endl;
printArray<double>(block.getBlockPtr(), nFeatures, block.getNumberOfRows(),
"Print 3 rows from CSR data array as dense double array:");
dataTable.releaseBlockOfRows(block);
return 0;
}