主题:[原创]矩阵构造函数问题,请高手指教!
// MatrixPCA.h 矩阵模板类头文件
// #include <valarray> //模板类valarray的标准头文件,本来是用#include <valarray>,编译通不过,就用下面的代码了。也不知道对不对
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
#include <valarray>
#pragma pop_macro("min")
#pragma pop_macro("max")
//构造函数二(参数1为指向矩阵的指针,参数2, 3为矩阵行与列数)
/******
矩阵类matrix的构造函数二
对私有变量m_stRow和m_stCol分别赋初值stRow, stCol。
对数组对象m_Datas使用了valarray类的构造函数:
valarray(const _Ty *p, size_t n)
m_Datas初始化的第一参数为矩阵rhs指针,第二个参数为rhs的元素总个数,
即rhs行数*列数
******/
matrix(const _Ty* rhs, size_t stRow, size_t stCol)
: m_Datas(rhs, stRow * stCol),
m_stRow(stRow), m_stCol(stCol)
{
}
然后我在cpp中
double m_PCALMatrixTemp[N][N]; // N是define过的定值
for (i=0; i <m_TotalSamples; i++)
{
for (j=0; j <m_TotalSamples; j++)
{
m_PCALMatrixTemp[i][j] = m_PCALMatrix[i][j];
}
}
matrix <double> v(N, N), da(&m_PCALMatrixTemp[0][0], N, N);
FILE *fp;
char path[255];
strcpy(path,"C:\\FisherFaces\\");
strcat(path,"JacobiVector.txt");
fp=fopen(path,"w");
if (fp)
{
for (i=0;i <m_TotalSamples;i++)
{
printf(fp,"\n");
for (j=0;j <m_TotalSamples;j++)
fprintf(fp,"%4.6f,\t",da(i,j));
}
fclose(fp);
}
到这里da中输出的值和m_PCALMatrixTemp中的值完全一样,也就是我想要的,可接下来就出问题了,大侠帮忙!
// EigenVectorPCA:开辟一个EigenValueIndex行,m_TotalSamples列的空间,用来存放特征向量
EigenVectorPCA = (double **)new double*[EigenValueIndex];
for (i=0; i <EigenValueIndex; i++)
{
EigenVectorPCA[i]=(double *)new double[m_TotalSamples];
}
// EigVecPCAInvert:开辟一个m_TotalSamples行,EigenValueIndex列的空间,用来存放转置后的特征向量
EigVecPCAInvert = (double **)new double*[m_TotalSamples];
for (i=0; i <m_TotalSamples; i++)
{
EigVecPCAInvert[i]=(double *)new double[EigenValueIndex];
}
// 将通过雅可比过关法取得的特征向量存入EigenVectorPCA
for (i=0; i <EigenValueIndex; i++)
{
for (j=0; j <m_TotalSamples; j++)
{
EigenVectorPCA[i][j] = v(j, EigenValueIndexArray[i]);
}
}
matrix <double> evp(&EigenVectorPCA[0][0], EigenValueIndex, m_TotalSamples); //使用.h中的构造函数的吧,好像没有错吧
然后输出evp(i,j),只有第一行和EigenVectorPCA中的一样,接下来就完全乱七八糟的值了,怎么回事啊?
// #include <valarray> //模板类valarray的标准头文件,本来是用#include <valarray>,编译通不过,就用下面的代码了。也不知道对不对
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
#include <valarray>
#pragma pop_macro("min")
#pragma pop_macro("max")
//构造函数二(参数1为指向矩阵的指针,参数2, 3为矩阵行与列数)
/******
矩阵类matrix的构造函数二
对私有变量m_stRow和m_stCol分别赋初值stRow, stCol。
对数组对象m_Datas使用了valarray类的构造函数:
valarray(const _Ty *p, size_t n)
m_Datas初始化的第一参数为矩阵rhs指针,第二个参数为rhs的元素总个数,
即rhs行数*列数
******/
matrix(const _Ty* rhs, size_t stRow, size_t stCol)
: m_Datas(rhs, stRow * stCol),
m_stRow(stRow), m_stCol(stCol)
{
}
然后我在cpp中
double m_PCALMatrixTemp[N][N]; // N是define过的定值
for (i=0; i <m_TotalSamples; i++)
{
for (j=0; j <m_TotalSamples; j++)
{
m_PCALMatrixTemp[i][j] = m_PCALMatrix[i][j];
}
}
matrix <double> v(N, N), da(&m_PCALMatrixTemp[0][0], N, N);
FILE *fp;
char path[255];
strcpy(path,"C:\\FisherFaces\\");
strcat(path,"JacobiVector.txt");
fp=fopen(path,"w");
if (fp)
{
for (i=0;i <m_TotalSamples;i++)
{
printf(fp,"\n");
for (j=0;j <m_TotalSamples;j++)
fprintf(fp,"%4.6f,\t",da(i,j));
}
fclose(fp);
}
到这里da中输出的值和m_PCALMatrixTemp中的值完全一样,也就是我想要的,可接下来就出问题了,大侠帮忙!
// EigenVectorPCA:开辟一个EigenValueIndex行,m_TotalSamples列的空间,用来存放特征向量
EigenVectorPCA = (double **)new double*[EigenValueIndex];
for (i=0; i <EigenValueIndex; i++)
{
EigenVectorPCA[i]=(double *)new double[m_TotalSamples];
}
// EigVecPCAInvert:开辟一个m_TotalSamples行,EigenValueIndex列的空间,用来存放转置后的特征向量
EigVecPCAInvert = (double **)new double*[m_TotalSamples];
for (i=0; i <m_TotalSamples; i++)
{
EigVecPCAInvert[i]=(double *)new double[EigenValueIndex];
}
// 将通过雅可比过关法取得的特征向量存入EigenVectorPCA
for (i=0; i <EigenValueIndex; i++)
{
for (j=0; j <m_TotalSamples; j++)
{
EigenVectorPCA[i][j] = v(j, EigenValueIndexArray[i]);
}
}
matrix <double> evp(&EigenVectorPCA[0][0], EigenValueIndex, m_TotalSamples); //使用.h中的构造函数的吧,好像没有错吧
然后输出evp(i,j),只有第一行和EigenVectorPCA中的一样,接下来就完全乱七八糟的值了,怎么回事啊?