我必须自己乘一个矩阵,直到矩阵在某种程度上不等于前面的矩阵之一。然后我需要得到矩阵相等的度数值。行数和列数相等。矩阵存储在一个二维数组中。值是0或1.检查与以前矩阵相等的最佳方法是什么?我试图用vector
存储矩阵:比较矩阵乘法
vector<int[5][5]> m;
,但我得到一个错误cannot convert from 'const int [5][5]' to 'int [5][5]'
。
等待一个建议。
我必须自己乘一个矩阵,直到矩阵在某种程度上不等于前面的矩阵之一。然后我需要得到矩阵相等的度数值。行数和列数相等。矩阵存储在一个二维数组中。值是0或1.检查与以前矩阵相等的最佳方法是什么?我试图用vector
存储矩阵:比较矩阵乘法
vector<int[5][5]> m;
,但我得到一个错误cannot convert from 'const int [5][5]' to 'int [5][5]'
。
等待一个建议。
它似乎缺少一个==
运营商,但它很容易增加:
#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace boost::numeric::ublas;
template<typename T>
bool operator==(const matrix<T>& m, const matrix<T>& n)
{
bool returnValue =
(m.size1() == n.size1()) &&
(m.size2() == n.size2());
if (returnValue)
{
for (unsigned int i = 0; returnValue && i < m.size1(); ++i)
{
for (unsigned int j = 0; returnValue && j < m.size2(); ++j)
{
returnValue &= m(i,j) == n(i,j);
}
}
}
return returnValue;
}
而像这样用:
int main()
{
matrix<double> m (3, 3);
for (unsigned int i = 0; i < m.size1(); ++ i)
{
for (unsigned int j = 0; j < m.size2(); ++ j)
{
m (i, j) = 3 * i + j;
}
}
std::cout << m << std::endl;
matrix<double> n (3, 3);
std::cout << (m == n) << std::endl;
std::cout << (m == m) << std::endl;
}
运算符=='缺少,因为浮点(库的目标)的等同比较几乎没有意义。在任何情况下,都有一个'ublas :: detail :: equals'(弱等式),因为它允许使用阈值,所以更安全。例如'ublas :: detail :: equals(m1,m2,1.e-6,0)'。或者如果坚持'template
用新的gcc说法(版本> 5和/或者C++ 11),'typename'关键字是强制性的,上面的函数应该是:'template
如果你想用vector
来做,你可能需要vector < vector <int> >
,即一个整数的矢量向量(即,一种2维向量)。
vector<int[5][5]>
会(如果它工作)声明2维5x5- int
-vectors的向量。
听起来像家庭作业。 – 2010-06-25 16:28:12
你应该发布导致编译错误的代码片段。 – 2010-06-25 16:28:29
'你在某种程度上'是否指轮换? (或者我只是忘记了这个词?)这些总是5x5矩阵吗? – Rup 2010-06-25 16:29:46