大矩阵的Opencv乘法

Posted

技术标签:

【中文标题】大矩阵的Opencv乘法【英文标题】:Opencv Multiplication of Large matrices 【发布时间】:2015-01-09 09:18:14 【问题描述】:

我有 2 个维度为 1*280000 的矩阵。

我想使用 opencv 将一个矩阵与转置的第二个矩阵相乘。

我尝试使用乘法运算符(*)将它们相乘。

但它给了我错误:'总大小矩阵不适合 size_t 类型'

在乘法之后,矩阵的大小将是 280000*28000。

所以,我认为乘法应该是 32 位的。

有什么方法可以做32位乘法吗?

【问题讨论】:

该矩阵将包含 78,400,000,000 个元素。假设它具有 32 位元素,则需要 313.6 GB 的 RAM。这真的是你想要的吗? 你有稀疏矩阵吗? 如果你有通用矩阵,你可能需要某种“大矩阵线性代数”库(不确定是否存在)。但是您可能需要大量的处理时间来处理此类矩阵。 实际上,我正在研究稀疏表示分类器。训练图像必须存储为向量,然后使用优化技术进行分类。所以,这就是向量大小如此之大的原因。跨度> 【参考方案1】:

你为什么要这样相乘?但是因为这是一个答案,所以我想帮助您思考的不仅仅是做它:

假设您有两个矩阵:AB (A.size() == B.size() == [1x280000])。 和A * B.t() = AB(AB是结果) 然后AB = [A[0][0]*B A[0][1]*B ... A[0][279999]*B](每一列是转置矩阵乘以另一个矩阵的对应元素)

AB也可以写成:

[ B[0][0]*A
  B[0][1]*A
  ...
  B[0][279999]*A]

(结果的每一行将是行矩阵乘以列(转置)矩阵的对应元素)

希望这对您正在做的事情有所帮助...使用 for 循环您可以打印、存储或您需要的结果

【讨论】:

以上是关于大矩阵的Opencv乘法的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 简单的二维矩阵乘法失败

OpenCV 断言在矩阵乘法上失败

OpenCV逐元素矩阵乘法

对OpenCV中3种乘法操作的理解掌握

OpenCV for Android 中的矩阵乘法

OpenCV 中的矩阵乘法 - 结合 cv::Mat 和 cv::Scalar 对象