update to .index_min()

This commit is contained in:
conrad
2024-11-12 17:07:20 +10:00
parent dbca4d6631
commit e83cea1b48
+83 -79
View File
@@ -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) );
// }
// }
// }