大矩阵的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】:你为什么要这样相乘?但是因为这是一个答案,所以我想帮助您思考的不仅仅是做它:
假设您有两个矩阵:A
和 B
(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乘法的主要内容,如果未能解决你的问题,请参考以下文章