比较矩阵乘法

时间:2010-06-25 16:26:03

标签: c++ arrays matrix

我必须将矩阵自身相乘,直到矩阵在某种程度上不等于前面的矩阵之一。然后我需要得到矩阵相等的度数值。行数和列数相等。矩阵存储在二维阵列中。值为0或1.检查与先前矩阵的相等性的最佳方法是什么?我尝试使用vector来存储矩阵:

vector<int[5][5]> m;

但我收到了错误cannot convert from 'const int [5][5]' to 'int [5][5]'

等待建议。

2 个答案:

答案 0 :(得分:3)

如果您可以使用boost,请查看提升Matrix类:

似乎缺少==运算符,但很容易添加:

#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;
}

[Code]

答案 1 :(得分:1)

如果你想用vector来做,你可能想要vector < vector < int > >,即整数向量的向量(即一种二维向量)。

vector<int[5][5]>会(如果有效)声明一个二维5x5 - int - 数组的向量。