graphprogram/matrix.cpp

71 lines
2.1 KiB
C++
Raw Permalink Normal View History

2024-10-11 23:45:55 +02:00
#include <cstdint>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
void print_matrix(const std::vector<std::vector<uint64_t>>& matrix) {
for (uint64_t column_index = 0; column_index < matrix[0].size(); column_index++) {
for (uint64_t row_index = 0; row_index < matrix.size(); row_index++) {
std::cout << matrix[row_index][column_index] << " ";
}
std::cout << "\n";
}
}
std::vector<std::vector<uint64_t>> gemm_basic(const std::vector<std::vector<uint64_t>>& matrix1,
const std::vector<std::vector<uint64_t>>& matrix2) {
std::vector<std::vector<uint64_t>> output_matrix(matrix1.size(), std::vector<uint64_t>(matrix2[0].size(), 0));
uint64_t sum;
for (uint64_t i = 0; i < matrix1.size(); i++) {
for (uint64_t j = 0; j < matrix2[0].size(); j++) {
sum = 0;
for (uint64_t k = 0; k < matrix1.size(); k++) {
sum += matrix1[i][k] * matrix2[k][j];
}
output_matrix[i][j] = sum;
}
}
return output_matrix;
}
std::vector<std::vector<uint64_t>> read_csv(const std::string file_name) {
std::vector<std::vector<uint64_t>> output_matrix;
std::vector<uint64_t> row;
std::string line;
uint64_t column_index = 0;
std::ifstream input_stream(file_name);
while (std::getline(input_stream, line)) {
uint64_t vertex_count = (line.length()+1)/2;
output_matrix.resize(vertex_count);
for (uint64_t row_index = 0; row_index < vertex_count; row_index++) {
output_matrix[row_index].push_back(0);
}
row.clear();
std::stringstream ss(line);
std::string token;
char delimiter = ';';
while (getline(ss, token, delimiter)) {
row.push_back(strtoul(token.c_str(), NULL, 0));
}
for (uint64_t row_index = 0; row_index < row.size(); row_index++) {
output_matrix[row_index][column_index] = row[row_index];
}
column_index++;
}
return output_matrix;
}