update to .index_min()
This commit is contained in:
+83
-79
@@ -23,42 +23,40 @@ using namespace arma;
|
||||
|
||||
TEST_CASE("fn_min_weird_operation")
|
||||
{
|
||||
mat a(10, 10);
|
||||
mat b(25, 10);
|
||||
a.randn();
|
||||
b.randn();
|
||||
mat a(10, 10, fill::randn);
|
||||
mat b(25, 10, fill::randn);
|
||||
|
||||
mat output = a * b.t();
|
||||
|
||||
uword real_min;
|
||||
uword operation_min;
|
||||
uword real_min = output.index_min();
|
||||
uword operation_min = (a * b.t()).index_min();
|
||||
|
||||
const double mval = output.min(real_min);
|
||||
const double other_mval = (a * b.t()).min(operation_min);
|
||||
const double mval = output.min();
|
||||
const double other_mval = (a * b.t()).min();
|
||||
|
||||
REQUIRE( real_min == operation_min );
|
||||
REQUIRE( mval == Approx(other_mval) );
|
||||
REQUIRE( real_min == operation_min );
|
||||
REQUIRE( mval == Approx(other_mval) );
|
||||
REQUIRE( mval == Approx(output(real_min)) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST_CASE("fn_min_weird_sparse_operation")
|
||||
{
|
||||
sp_mat a(10, 10);
|
||||
sp_mat b(25, 10);
|
||||
a.sprandn(10, 10, 0.3);
|
||||
b.sprandn(25, 10, 0.3);
|
||||
sp_mat a; a.sprandn(10, 10, 0.3);
|
||||
sp_mat b; b.sprandn(25, 10, 0.3);
|
||||
|
||||
sp_mat output = a * b.t();
|
||||
|
||||
uword real_min;
|
||||
uword operation_min;
|
||||
uword real_min = output.index_min();
|
||||
uword operation_min = (a * b.t()).index_min();
|
||||
|
||||
const double mval = output.min(real_min);
|
||||
const double other_mval = (a * b.t()).min(operation_min);
|
||||
const double mval = output.min();
|
||||
const double other_mval = (a * b.t()).min();
|
||||
|
||||
REQUIRE( real_min == operation_min );
|
||||
REQUIRE( mval == Approx(other_mval) );
|
||||
REQUIRE( real_min == operation_min );
|
||||
REQUIRE( mval == Approx(other_mval) );
|
||||
REQUIRE( mval == Approx(output(real_min)) );
|
||||
}
|
||||
|
||||
|
||||
@@ -73,15 +71,15 @@ TEST_CASE("fn_min_sp_subview_test")
|
||||
sp_mat x;
|
||||
x.sprandn(r, r, 0.3);
|
||||
|
||||
uword x_min;
|
||||
uword x_subview_min1;
|
||||
uword x_subview_min2;
|
||||
uword x_subview_min3;
|
||||
uword x_min = x.index_min();
|
||||
uword x_subview_min1 = x.submat(0, 0, r - 1, r - 1).index_min();
|
||||
uword x_subview_min2 = x.cols(0, r - 1).index_min();
|
||||
uword x_subview_min3 = x.rows(0, r - 1).index_min();
|
||||
|
||||
const double mval = x.min(x_min);
|
||||
const double mval1 = x.submat(0, 0, r - 1, r - 1).min(x_subview_min1);
|
||||
const double mval2 = x.cols(0, r - 1).min(x_subview_min2);
|
||||
const double mval3 = x.rows(0, r - 1).min(x_subview_min3);
|
||||
const double mval = x.min();
|
||||
const double mval1 = x.submat(0, 0, r - 1, r - 1).min();
|
||||
const double mval2 = x.cols(0, r - 1).min();
|
||||
const double mval3 = x.rows(0, r - 1).min();
|
||||
|
||||
if (mval != 0.0)
|
||||
{
|
||||
@@ -92,6 +90,8 @@ TEST_CASE("fn_min_sp_subview_test")
|
||||
REQUIRE( mval == Approx(mval1) );
|
||||
REQUIRE( mval == Approx(mval2) );
|
||||
REQUIRE( mval == Approx(mval3) );
|
||||
|
||||
REQUIRE( mval == Approx(x(x_min)) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -105,13 +105,13 @@ TEST_CASE("fn_min_spsubview_col_test")
|
||||
sp_vec x;
|
||||
x.sprandn(r, 1, 0.3);
|
||||
|
||||
uword x_min;
|
||||
uword x_subview_min1;
|
||||
uword x_subview_min2;
|
||||
uword x_min = x.index_min();
|
||||
uword x_subview_min1 = x.submat(0, 0, r - 1, 0).index_min();
|
||||
uword x_subview_min2 = x.rows(0, r - 1).index_min();
|
||||
|
||||
const double mval = x.min(x_min);
|
||||
const double mval1 = x.submat(0, 0, r - 1, 0).min(x_subview_min1);
|
||||
const double mval2 = x.rows(0, r - 1).min(x_subview_min2);
|
||||
const double mval = x.min();
|
||||
const double mval1 = x.submat(0, 0, r - 1, 0).min();
|
||||
const double mval2 = x.rows(0, r - 1).min();
|
||||
|
||||
if (mval != 0.0)
|
||||
{
|
||||
@@ -120,6 +120,8 @@ TEST_CASE("fn_min_spsubview_col_test")
|
||||
|
||||
REQUIRE( mval == Approx(mval1) );
|
||||
REQUIRE( mval == Approx(mval2) );
|
||||
|
||||
REQUIRE( mval == Approx(x(x_min)) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -133,13 +135,13 @@ TEST_CASE("fn_min_spsubview_row_min_test")
|
||||
sp_rowvec x;
|
||||
x.sprandn(1, r, 0.3);
|
||||
|
||||
uword x_min;
|
||||
uword x_subview_min1;
|
||||
uword x_subview_min2;
|
||||
uword x_min = x.index_min();
|
||||
uword x_subview_min1 = x.submat(0, 0, 0, r - 1).index_min();
|
||||
uword x_subview_min2 = x.cols(0, r - 1).index_min();
|
||||
|
||||
const double mval = x.min(x_min);
|
||||
const double mval1 = x.submat(0, 0, 0, r - 1).min(x_subview_min1);
|
||||
const double mval2 = x.cols(0, r - 1).min(x_subview_min2);
|
||||
const double mval = x.min();
|
||||
const double mval1 = x.submat(0, 0, 0, r - 1).min();
|
||||
const double mval2 = x.cols(0, r - 1).min();
|
||||
|
||||
if (mval != 0.0)
|
||||
{
|
||||
@@ -148,51 +150,53 @@ TEST_CASE("fn_min_spsubview_row_min_test")
|
||||
|
||||
REQUIRE( mval == Approx(mval1) );
|
||||
REQUIRE( mval == Approx(mval2) );
|
||||
|
||||
REQUIRE( mval == Approx(x(x_min)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST_CASE("fn_min_spincompletesubview_min_test")
|
||||
{
|
||||
for (size_t r = 50; r < 150; ++r)
|
||||
{
|
||||
sp_mat x;
|
||||
x.sprandn(r, r, 0.3);
|
||||
|
||||
uword x_min;
|
||||
uword x_subview_min1;
|
||||
uword x_subview_min2;
|
||||
uword x_subview_min3;
|
||||
|
||||
const double mval = x.min(x_min);
|
||||
const double mval1 = x.submat(1, 1, r - 2, r - 2).min(x_subview_min1);
|
||||
const double mval2 = x.cols(1, r - 2).min(x_subview_min2);
|
||||
const double mval3 = x.rows(1, r - 2).min(x_subview_min3);
|
||||
|
||||
uword row, col;
|
||||
x.min(row, col);
|
||||
|
||||
if (row != 0 && row != r - 1 && col != 0 && col != r - 1 && mval != 0.0)
|
||||
{
|
||||
uword srow, scol;
|
||||
|
||||
srow = x_subview_min1 % (r - 2);
|
||||
scol = x_subview_min1 / (r - 2);
|
||||
REQUIRE( x_min == (srow + 1) + r * (scol + 1) );
|
||||
REQUIRE( x_min == x_subview_min2 + r );
|
||||
|
||||
srow = x_subview_min3 % (r - 2);
|
||||
scol = x_subview_min3 / (r - 2);
|
||||
REQUIRE( x_min == (srow + 1) + r * scol );
|
||||
|
||||
REQUIRE( mval == Approx(mval1) );
|
||||
REQUIRE( mval == Approx(mval2) );
|
||||
REQUIRE( mval == Approx(mval3) );
|
||||
}
|
||||
}
|
||||
}
|
||||
// TEST_CASE("fn_min_spincompletesubview_min_test")
|
||||
// {
|
||||
// for (size_t r = 50; r < 150; ++r)
|
||||
// {
|
||||
// sp_mat x;
|
||||
// x.sprandn(r, r, 0.3);
|
||||
//
|
||||
// uword x_min;
|
||||
// uword x_subview_min1;
|
||||
// uword x_subview_min2;
|
||||
// uword x_subview_min3;
|
||||
//
|
||||
// const double mval = x.min(x_min);
|
||||
// const double mval1 = x.submat(1, 1, r - 2, r - 2).min(x_subview_min1);
|
||||
// const double mval2 = x.cols(1, r - 2).min(x_subview_min2);
|
||||
// const double mval3 = x.rows(1, r - 2).min(x_subview_min3);
|
||||
//
|
||||
// uword row, col;
|
||||
// x.min(row, col);
|
||||
//
|
||||
// if (row != 0 && row != r - 1 && col != 0 && col != r - 1 && mval != 0.0)
|
||||
// {
|
||||
// uword srow, scol;
|
||||
//
|
||||
// srow = x_subview_min1 % (r - 2);
|
||||
// scol = x_subview_min1 / (r - 2);
|
||||
// REQUIRE( x_min == (srow + 1) + r * (scol + 1) );
|
||||
// REQUIRE( x_min == x_subview_min2 + r );
|
||||
//
|
||||
// srow = x_subview_min3 % (r - 2);
|
||||
// scol = x_subview_min3 / (r - 2);
|
||||
// REQUIRE( x_min == (srow + 1) + r * scol );
|
||||
//
|
||||
// REQUIRE( mval == Approx(mval1) );
|
||||
// REQUIRE( mval == Approx(mval2) );
|
||||
// REQUIRE( mval == Approx(mval3) );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user