当前位置: 首页 > 知识库问答 >
问题:

OpenCV:包含Vec3d的矩阵和包含双打的矩阵的矩阵乘法

壤驷彦
2023-03-14

我正在使用OpenCV一段时间,现在我需要这种类型的乘法:

定义一个矩阵T,其中包含类型为Vec3d1的元素。矩阵T的大小为:M X N。矩阵T必须与VectorPhi相乘,VectorPhi的大小为:N X 1,包含双s作为值。结果的每个元素必须是两个矩阵的矩阵相乘的结果。

我不想做组件式乘法,而是“实”矩阵乘法,例如,将t2的第一个元素与矩阵J的第一个元素相乘,然后将矩阵t3的第二个元素与矩阵J的第二个元素相乘。这样做直到你完成第一行的T,然后总结结果。结果是一个m1。

例如,如果T是一个3x2矩阵,而Phi是一个2x1矩阵,那么对于结果的第一个值,计算应该是T_11*Phi_11 T_12*Phi_21。目前,我使用两种速度较慢的for循环:

for (int i = 0; i<M; ++i){
    cv::Mat summedResult = cv::Mat(3, 1, CV_64F, double(0));
    for (uint32 j = 0; j<N; ++j){
        summedResult = summedResult + 
        (cv::Mat(mMatrixT.at<cv::Vec3d>(i, j)) * mMatrixPhi.at<double>(j));
    }
    // The result matrix contains values of type Vec3d again
    mResultMatrix.at<cv::Vec3d>(i) = cv::Vec3d(summedResult);
}

更一般地说:在OpenCV中,是否有可能有效地将包含Vec3ds和双代码的矩阵相乘?

1。包含双精度的三维向量

2。坐标:1,1

坐标: 1,2


共有1个答案

崔恺
2023-03-14

我仍然不知道你期望得到什么样的结果,但也许可以试试这个:

假设你有一个Vec3d的MxN矩阵和一个double类型的Nx1矩阵,你的结果将是一个Vec3d类型的Mx1矩阵:

for (int i = 0; i<M; ++i)
    {
        cv::Vec3d summedResult; // here this must be a Vec3d instead of a matrix, if I assume the right result expection
        for (uint32 j = 0; j<N; ++j)
        {
            summedResult = summedResult + (mMatrixT.at<cv::Vec3d>(i, j) * mMatrixPhi.at<double>(j));
        }
        // The result matrix contains values of type Vec3d again
        mResultMatrix.at<cv::Vec3d>(i) = summedResult;
    }

编辑:

啊,对不起,我没有读到最后,你提供的代码工作,但太慢了。。。嗯,我认为这是没有优化的,因为数学上这是没有定义的。你可以做的是将你的Vec3d矩阵转换成Mx(3*N)矩阵,将你的Nx1矩阵转换成(3*N)x1矩阵(在下一个值之前是相同值的3倍),并直接使用OpenCV矩阵产品。但这可能不会更快,因为两个矩阵的大小都是3*

编辑:将是不同的结果,因为每个元素将是Vec3d元素的总和。。。

 类似资料:
  • 给定矩阵(大小by)和幂,(例如,4),产生矩阵,其中每个-th矩阵包含所有中的列在该程度上的可能组合。 在我当前的方法中,我生成-th矩阵,然后在下一次调用中使用它来生成th矩阵。对于给定的功率,这是否可以“自动”完成,而不是手动完成? 说到R,我是一个新手,我明白有可能比下面的尝试更有效、更优雅地实现这个解决方案。。。 有人能提供一些建议吗?我的目标是为给定的矩阵创建一个函数,并以更“自动化”

  • 基于我下面链接的相关问题(请参见@Aleh solution):我希望只计算给定幂的矩阵中列之间的唯一乘积。 例如,对于N=5,M=3,p=2,我们得到列(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)的乘积。我想修改(@Aleh)代码,只计算(1,1)、(1,2)、(1,3)、(2,2)、(2,3)、(3,3)列之间的乘积。但我想对每个第

  • 主要内容:逐元素矩阵乘法,矩阵乘积运算,矩阵点积矩阵乘法是将两个矩阵作为输入值,并将 A 矩阵的行与 B 矩阵的列对应位置相乘再相加,从而生成一个新矩阵,如下图所示: 注意:必须确保第一个矩阵中的行数等于第二个矩阵中的列数,否则不能进行矩阵乘法运算。 图1:矩阵乘法 矩阵乘法运算被称为向量化操作,向量化的主要目的是减少使用的 for 循环次数或者根本不使用。这样做的目的是为了加速程序的计算。 下面介绍 NumPy 提供的三种矩阵乘法,从而进一步

  • 问题内容: 在numpy中,我有N个3x3矩阵的数组。这将是我如何存储它们的示例(我正在提取内容): 我也有一个由3个向量组成的数组,这将是一个示例: 我似乎无法弄清楚如何通过numpy将它们相乘,从而实现如下效果: 与的形状(在投射到阵列)是。但是,由于速度的原因,列表实现是不可能的。 我尝试了各种换位的np.dot,但最终结果没有得到正确的形状。 问题答案: 使用 脚步 : 1)保持第一根轴对

  • 我想使用寄存器(逐行信息)通过向量算法创建矩阵乘法。打开外循环4次我有空洞matvec_XMM(双* a,双* x,双* y,整数n,整数磅)函数的问题,它返回了不好的结果,这是算法wchich我必须使用: 它是ma代码:

  • 我在查看一些代码时发现了以下内容: 有什么区别呢?顺便说一句:我对矩阵很陌生