Line data Source code
1 : // ***************************************************************
2 : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
3 : // SPDX-FileType: SOURCE
4 : // SPDX-License-Identifier: MIT
5 : // ***************************************************************
6 :
7 :
8 : #include "bayesnetUtils.h"
9 : namespace bayesnet {
10 : // Return the indices in descending order
11 186 : std::vector<int> argsort(std::vector<double>& nums)
12 : {
13 186 : int n = nums.size();
14 186 : std::vector<int> indices(n);
15 186 : iota(indices.begin(), indices.end(), 0);
16 3816 : sort(indices.begin(), indices.end(), [&nums](int i, int j) {return nums[i] > nums[j];});
17 186 : return indices;
18 0 : }
19 42 : std::vector<std::vector<double>> tensorToVectorDouble(torch::Tensor& dtensor)
20 : {
21 : // convert mxn tensor to mxn std::vector
22 42 : std::vector<std::vector<double>> result;
23 : // Iterate over cols
24 10818 : for (int i = 0; i < dtensor.size(0); ++i) {
25 32328 : auto col_tensor = dtensor.index({ i, "..." });
26 10776 : auto col = std::vector<double>(col_tensor.data_ptr<float>(), col_tensor.data_ptr<float>() + dtensor.size(1));
27 10776 : result.push_back(col);
28 10776 : }
29 42 : return result;
30 10776 : }
31 54 : torch::Tensor vectorToTensor(std::vector<std::vector<int>>& vector, bool transpose)
32 : {
33 : // convert nxm std::vector to mxn tensor if transpose
34 54 : long int m = transpose ? vector[0].size() : vector.size();
35 54 : long int n = transpose ? vector.size() : vector[0].size();
36 54 : auto tensor = torch::zeros({ m, n }, torch::kInt32);
37 354 : for (int i = 0; i < m; ++i) {
38 74886 : for (int j = 0; j < n; ++j) {
39 74586 : tensor[i][j] = transpose ? vector[j][i] : vector[i][j];
40 : }
41 : }
42 54 : return tensor;
43 0 : }
44 : }
|