Skip to content

Commit

Permalink
Fix compilation errors for rgeoda (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
lixun910 authored Jun 28, 2023
1 parent 7bab140 commit d481d71
Show file tree
Hide file tree
Showing 15 changed files with 424 additions and 439 deletions.
81 changes: 40 additions & 41 deletions DataUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
#include "rng.h"
#include "GdaConst.h"
#include "./weights/GalWeight.h"
using namespace std;

namespace GdaAlgs {

Expand Down Expand Up @@ -243,7 +242,7 @@ class DataUtils {
return d;
}

static void doubleCenter(vector<vector<double> >& matrix)
static void doubleCenter(std::vector<std::vector<double> >& matrix)
{
int n = (int)matrix[0].size();
int k = (int)matrix.size();
Expand All @@ -263,7 +262,7 @@ class DataUtils {
}
}

static void multiply(vector<vector<double> >& matrix, double factor)
static void multiply(std::vector<std::vector<double> >& matrix, double factor)
{
int n = (int)matrix[0].size();
int k = (int)matrix.size();
Expand All @@ -274,7 +273,7 @@ class DataUtils {
}
}

static void squareEntries(vector<vector<double> >& matrix)
static void squareEntries(std::vector<std::vector<double> >& matrix)
{
int n = (int)matrix[0].size();
int k = (int)matrix.size();
Expand All @@ -285,7 +284,7 @@ class DataUtils {
}
}

static double prod(vector<double> x, vector<double> y) {
static double prod(std::vector<double> x, std::vector<double> y) {
int n = (int)x.size();
double val = 0;
for (int i=0; i<n; i++) {
Expand All @@ -294,18 +293,18 @@ class DataUtils {
return val;
}

static double normalize(vector<double>& x) {
static double normalize(std::vector<double>& x) {
double norm = sqrt(prod(x, x));
for (size_t i = 0; i < x.size(); i++) x[i] /= norm;
return norm;
}

static void normalize(vector<vector<double> >& x)
static void normalize(std::vector<std::vector<double> >& x)
{
for (size_t i = 0; i < x.size(); i++) normalize(x[i]);
}

static void eigen(vector<vector<double> >& matrix, vector<vector<double> >& evecs, vector<double>& evals, int maxiter) {
static void eigen(std::vector<std::vector<double> >& matrix, std::vector<std::vector<double> >& evecs, std::vector<double>& evals, int maxiter) {

Xoroshiro128Random rng;
rng.SetSeed(4101842887655102017L);
Expand All @@ -327,7 +326,7 @@ class DataUtils {

for (int iter = 0; (fabs(1.0 - r) > eps) && (iter < maxiter); iter++) {
//for (int iter = 0; iter < maxiter; iter++) {
vector<double> q(k,0);
std::vector<double> q(k,0);
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++)
q[i] += matrix[i][j] * evecs[m][j];
Expand All @@ -340,7 +339,7 @@ class DataUtils {
}
}

static void reverse_eigen(vector<vector<double> >& matrix, vector<vector<double> >& evecs, vector<double>& evals, int maxiter) {
static void reverse_eigen(std::vector<std::vector<double> >& matrix, std::vector<std::vector<double> >& evecs, std::vector<double>& evals, int maxiter) {
Xoroshiro128Random rng;
rng.SetSeed(4101842887655102017L);

Expand All @@ -360,7 +359,7 @@ class DataUtils {
double r = 0.0;

for (int iter = 0; (fabs(1.0 - r) > eps) && (iter < maxiter); iter++) {
vector<double> q(k,0);
std::vector<double> q(k,0);
for (int i = 0; i < k; i++) {
q[i] -= rho * evecs[m][i];
for (int j = 0; j < k; j++)
Expand All @@ -374,7 +373,7 @@ class DataUtils {
}
}

static double smallestEigenvalue(vector<vector<double> >& matrix)
static double smallestEigenvalue(std::vector<std::vector<double> >& matrix)
{
Xoroshiro128Random rng;
rng.SetSeed(4101842887655102017L);
Expand All @@ -384,7 +383,7 @@ class DataUtils {
double eps = 1.0E-6;
//int maxiter = 100;
double lambda = 0.0;
vector<double> x(n);
std::vector<double> x(n);
for (int i = 0; i < n; i++) {
x[i] = (0.5 - rng.nextDouble());
}
Expand All @@ -393,7 +392,7 @@ class DataUtils {
double r = 0.0;

for (int iter = 0; (abs(1.0 - r) > eps) && (iter < 100); iter++) {
vector<double> q(n,0);
std::vector<double> q(n,0);

for (int i = 0; i < n; i++) {
q[i] -= rho * x[i];
Expand All @@ -408,17 +407,17 @@ class DataUtils {
return lambda + rho;
}

static double largestEigenvalue(vector<vector<double> >& matrix)
static double largestEigenvalue(std::vector<std::vector<double> >& matrix)
{
int n = (int)matrix.size();
double eps = 1.0E-6;
//int maxiter = 100;
double lambda = 0.0;
vector<double> x(n,1.0);
std::vector<double> x(n,1.0);
double r = 0.0;

for (int iter = 0; (fabs(1.0 - r) > eps) && (iter < 100); iter++) {
vector<double> q(n,0);
std::vector<double> q(n,0);

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
Expand All @@ -432,7 +431,7 @@ class DataUtils {
return lambda;
}

static void randomize(vector<vector<double> >& matrix) {
static void randomize(std::vector<std::vector<double> >& matrix) {
Xoroshiro128Random rng;
rng.SetSeed(4101842887655102017L);

Expand All @@ -445,10 +444,10 @@ class DataUtils {
}
}

static vector<int> landmarkIndices(vector<vector<double> >& matrix) {
static std::vector<int> landmarkIndices(std::vector<std::vector<double> >& matrix) {
int k = (int)matrix.size();
int n = (int)matrix[0].size();
vector<int> result(k);
std::vector<int> result(k);
for (int i = 0; i < k; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0.0) {
Expand All @@ -459,10 +458,10 @@ class DataUtils {
return result;
}

static vector<vector<double> > copyMatrix(vector<vector<double> >& matrix) {
static std::vector<std::vector<double> > copyMatrix(std::vector<std::vector<double> >& matrix) {
int k = (int)matrix.size();
int n = (int)matrix[0].size();
vector<vector<double> > copy(k);
std::vector<std::vector<double> > copy(k);

for (int i = 0; i < k; i++) {
copy[i].resize(n);
Expand Down Expand Up @@ -550,8 +549,8 @@ class DataUtils {
return result;
}

static vector<vector<double> > copyRaggedMatrix(double** matrix, int n, int k) {
vector<vector<double> > copy(k);
static std::vector<std::vector<double> > copyRaggedMatrix(double** matrix, int n, int k) {
std::vector<std::vector<double> > copy(k);

for (int i = 0; i < k; i++) {
copy[i].resize(n);
Expand All @@ -569,7 +568,7 @@ class DataUtils {
return copy;
}

static void selfprod(vector<vector<double> >& d, vector<vector<double> >& result)
static void selfprod(std::vector<std::vector<double> >& d, std::vector<std::vector<double> >& result)
{
int k = (int)d.size();
int n = (int)d[0].size();
Expand All @@ -583,18 +582,18 @@ class DataUtils {
}
}

static void svd(vector<vector<double> >& matrix, vector<vector<double> >& svecs, vector<double>& svals, int maxiter=100)
static void svd(std::vector<std::vector<double> >& matrix, std::vector<std::vector<double> >& svecs, std::vector<double>& svals, int maxiter=100)
{
int k = (int)matrix.size();
int n = (int)matrix[0].size();
int d = (int)svecs.size();

for (int m = 0; m < d; m++) svals[m] = normalize(svecs[m]);
vector<vector<double> > K(k);
std::vector<std::vector<double> > K(k);
for (int i=0; i<k; i++) K[i].resize(k);

selfprod(matrix, K);
vector<vector<double> > temp(d);
std::vector<std::vector<double> > temp(d);
for (int i=0; i<d; i++) temp[i].resize(k);

for (int m = 0; m < d; m++) {
Expand All @@ -607,7 +606,7 @@ class DataUtils {
for (int m = 0; m < d; m++) svals[m] = normalize(svecs[m]);
eigen(K, temp, svals, maxiter);

vector<vector<double> > tempOld(d);
std::vector<std::vector<double> > tempOld(d);
for (int i=0; i<d; i++) tempOld[i].resize(k);

for (int m = 0; m < d; m++)
Expand All @@ -633,14 +632,14 @@ class DataUtils {
}


static vector<vector<double> > landmarkMatrix(vector<vector<double> >& matrix)
static std::vector<std::vector<double> > landmarkMatrix(std::vector<std::vector<double> >& matrix)
{
int k = (int)matrix.size();

vector<vector<double> > result(k);
std::vector<std::vector<double> > result(k);
for (int i=0; i<k; i++) result[i].resize(k);

vector<int> index = landmarkIndices(matrix);
std::vector<int> index = landmarkIndices(matrix);
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
result[i][j] = matrix[i][index[j]];
Expand All @@ -650,19 +649,19 @@ class DataUtils {
}

/*
static vector<vector<double> > pivotRows(vector<vector<double> >& matrix, int k)
static std::vector<std::vector<double> > pivotRows(std::vector<std::vector<double> >& matrix, int k)
{
int K = matrix.size();
if (k >= K) {
return matrix;
}
int n = matrix[0].size();
//System.out.println(n + " " + k + " " + K);
vector<vector<double> > result(k);
std::vector<std::vector<double> > result(k);
for (int i=0; i<n; i++) result[i].resize(n);
int pivot = 0;
vector<double> _min(n);
std::vector<double> _min(n);
for (int i = 0; i < n; i++)
_min[i] = DBL_MAX;
for (int i = 0; i < k; i++) {
Expand All @@ -679,7 +678,7 @@ class DataUtils {
return result;
}*/

static void scale(vector<vector<double> >& x, vector<vector<double> >& D)
static void scale(std::vector<std::vector<double> >& x, std::vector<std::vector<double> >& D)
{
int n = (int)x[0].size();
int d = (int)x.size();
Expand All @@ -700,13 +699,13 @@ class DataUtils {
}

/*
static vector<vector<double> > maxminPivotMatrix(vector<vector<double> >& matrix, int k)
static std::vector<std::vector<double> > maxminPivotMatrix(std::vector<std::vector<double> >& matrix, int k)
{
int n = matrix[0].size();
vector<vector<double> > result(k);
std::vector<std::vector<double> > result(k);
for (int i=0; i<n; i++) result[i].resize(n);
int pivot = 0;
vector<double> min(n);
std::vector<double> min(n);
for (int i = 0; i < n; i++) min[i] = DBL_MAX;
for (int i = 0; i < k; i++) {
for (int j = 0; j < n; j++) {
Expand All @@ -721,10 +720,10 @@ class DataUtils {
return result;
}
static vector<vector<double> > randomPivotMatrix(vector<vector<double> >& matrix, int k)
static std::vector<std::vector<double> > randomPivotMatrix(std::vector<std::vector<double> >& matrix, int k)
{
int n = matrix[0].size();
vector<vector<double> > result(k);
std::vector<std::vector<double> > result(k);
for (int i=0; i<n; i++) result[i].resize(n);
boolean[] isPivot = new boolean[n];
Expand Down
Loading

0 comments on commit d481d71

Please sign in to comment.