矩阵的乘积

时间:2015-08-04 08:49:36

标签: c++ opencv codeblocks

我需要乘以两个矩阵,其中一个大小为36000x1乘以其转置。 我收到以下错误:

  

其中一个论点'值超出范围(总矩阵大小不适合setSize中的" size_t"类型)。

我该怎么办?我使用的是64位计算机。

2 个答案:

答案 0 :(得分:0)

矩阵A:36000x1

矩阵B:1x36000

因此矩阵C = AxB:36000x36000

然后C有1296000000个元素,其成本约为1.2G * sizeof(元素类型)。

请参阅此处的说明:declaring the largest array using size_t

答案 1 :(得分:0)

由于矩阵mA Nx1和矩阵mB 1xN的乘法是微不足道的:Prod [i1] [i2] == mA [i1] * mB [i2],您不必存储结果,只需存储2个矩阵(如果总是完成换位,则返回1)并根据索引返回结果。

未经测试的代码:

struct ProdmNx1Transp
{
  const std::vector<int>& m; // reference, so the matrix must outlive the product.
  explicit ProdmNx1Transp(const std::vector<int>& in_m) : m(in_m) { }
  int operator(int i1, int i2) const { /* first check ranges */ return m[i1] * m[i2]; }
};

std::vector<int> m1 = { 1, 2, 3, 4 };
ProdmNx1Transp prod(m1);
std::cout << prod(0, 2) << ", " << prod(3, 1) << '\n';