Пример #1
0
void MLComputeTest::stdev_data()
{
    QTest::addColumn<VD>("data");
    QTest::addColumn<double>("result");
    QTest::newRow("empty") << VD() << 0.0;
    QTest::newRow("single-zero") << VD({ 0 }) << 0.0;
    QTest::newRow("single-non-zero") << VD({ 1 }) << 0.0;
    QTest::newRow("integer") << VD({ 2, 4, 4, 4, 5, 5, 5, 7, 9 }) << 2.0;
}
Пример #2
0
void MatrixRmn::ComputeInverse( MatrixRmn& R) const
{
    assert ( this->NumRows==this->NumCols );
    MatrixRmn U(this->NumRows, this->NumCols);
    VectorRn w(this->NumRows);
    MatrixRmn V(this->NumRows, this->NumCols);
    
    this->ComputeSVD(U, w, V);
    
    assert(this->DebugCheckSVD(U, w , V));
    
    double PseudoInverseThresholdFactor = 0.01;
    double pseudoInverseThreshold = PseudoInverseThresholdFactor*w.MaxAbs();
    
    MatrixRmn VD(this->NumRows, this->NumCols);
    MatrixRmn D(this->NumRows, this->NumCols);
    D.SetZero();
    long diagLength = w.GetLength();
    double* wPtr = w.GetPtr();
    for ( long i = 0; i < diagLength; ++i ) {
        double alpha = *(wPtr++);
        if ( fabs(alpha)>pseudoInverseThreshold ) {
            D.Set(i, i, 1.0/alpha);
        }
    }
    
    Multiply(V,D,VD);
    MultiplyTranspose(VD,U,R);
}
Пример #3
0
void MLComputeTest::mean_data()
{
    QTest::addColumn<VD>("data");
    QTest::addColumn<double>("result");
    QTest::newRow("empty") << VD() << 0.0;
    QTest::newRow("single-zero") << VD({ 0 }) << 0.0;
    QTest::newRow("single-non-zero") << VD({ 1 }) << 1.0;
    QTest::newRow("same values") << VD({ 1, 1, 1, 1 }) << 1.0;
    QTest::newRow("opposite values") << VD({ 2, -2, 2, -2, 2, -2 }) << 0.0;
    QTest::newRow("integer") << VD({ 2, 4, 4, 4, 5, 5, 5, 7, 9 }) << 5.0;
    QTest::newRow("real") << VD({ 2.2, 4.7, 3.5, 4.1, 4.7, -5.2, 2.1, 0, -1, 0.9 }) << 1.6;
}
Пример #4
0
void MLComputeTest::sum_data()
{
    QTest::addColumn<QVector<double> >("data");
    QTest::addColumn<double>("result");

    QTest::newRow("empty") << VD() << 0.0;
    QTest::newRow("single") << VD({ 42 }) << 42.0;
    QTest::newRow("negative") << VD({ -42 }) << -42.0;
    QTest::newRow("multiple") << VD({ 24, 42 }) << 66.0;
    QTest::newRow("inverse") << VD({ 24, -24 }) << 0.0;
    QTest::newRow("progression") << VD({ 1, -2, 3, -4, 5, -6, 7, -8 }) << -4.0;
}
Пример #5
0
void MLComputeTest::min_data()
{
    QTest::addColumn<QVector<double> >("data");
    QTest::addColumn<double>("result");

    QTest::newRow("empty") << VD() << 0.0;
    QTest::newRow("single") << VD({ 42 }) << 42.0;
    QTest::newRow("negative") << VD({ -42 }) << -42.0;
    QTest::newRow("multi-different 1") << VD({ 24, 42 }) << 24.0;
    QTest::newRow("multi-different 2") << VD({ 42, 24 }) << 24.0;
    QTest::newRow("multi-same") << VD({ 42, 42 }) << 42.0;
}
Пример #6
0
int	user_data_get_grid (v5dstruct *v, int itime, int ivar,
                            float *grid_data)

{

    int		i, ir, ic, il, nr, nc, nl;
    long	ndat, noff, ltmp;
    char	file_name[1000], *ptmp;
    float	*dat;
    FILE	*file;



    nr = v->Nr;
    nc = v->Nc;
    nl = v->Nl[ivar];



    strcpy (file_name, user_file_name);

    if (strlen (file_name) == 0) return 0;

    ptmp = strrchr (file_name, '.');
    if (ptmp == NULL) ptmp = file_name + strlen (file_name);
    sprintf (ptmp, "_%s.dat", v->VarName[ivar]);

    fprintf (stderr, "Reading user grid file %s\n", file_name);
    if ((file = fopen (file_name, "rb")) == NULL) return 0;



    ndat = nr * nc * nl;
    dat  = (float *) malloc (ndat * sizeof (float));
    if (dat == NULL) return 0;

    noff = ((ndat * sizeof (float)) + (2 * sizeof (long))) * itime;
    fseek (file, noff, SEEK_SET);
    fread (&ltmp, 1, sizeof (long), file); /* skip over reference time */
    fread (&ltmp, 1, sizeof (long), file); /* skip over forecast time */
    fread (dat, ndat, sizeof (float), file);



#define VD(ROW, COL, LEV)   grid_data[ (ROW) + (((COL) + (LEV) * nc) * nr) ]

    i = 0;
    for (il = 0; il < nl; il++)
    {
        for (ir = nr-1; ir >= 0; ir--)
        {
            for (ic = 0; ic < nc; ic++, i++)
            {
                if (dat[i] == -99999.0) dat[i] = MISSING;
                VD(ir, ic, il) = dat[i];
            }
        }
    }

    free (dat);


    return 1;
}
Пример #7
0
void MLComputeTest::dotProduct_data()
{
    QTest::addColumn<QVector<double> >("data1");
    QTest::addColumn<QVector<double> >("data2");
    QTest::addColumn<double>("result");

    QTest::newRow("empty") << VD() << VD() << 0.0;
    QTest::newRow("first-empty") << VD() << VD({ 0 }) << 0.0;
    QTest::newRow("second-empty") << VD({ 0 }) << VD() << 0.0;
    QTest::newRow("diff-size") << VD({ 1 }) << VD({ 1, 2, 3, 4 }) << 0.0;
    QTest::newRow("zero") << VD({ 0 }) << VD({ 0 }) << 0.0;
    QTest::newRow("first-zero") << VD({ 0, 0, 0 }) << VD({ 1, 2, 3 }) << 0.0;
    QTest::newRow("square") << VD({ 1, 1, 1 }) << VD({ 1, 1, 1 }) << 3.0;
}