向量乘法矩阵[重复]

Posted

技术标签:

【中文标题】向量乘法矩阵[重复]【英文标题】:Matrix by vector multiplication [duplicate] 【发布时间】:2016-09-15 20:08:58 【问题描述】:

简单的问题。我找不到任何解决方案! 没关系:

Mat dst = new Mat();
        Mat a = Mat.ones(3,3,CvType.CV_32FC1);
        Mat b = Mat.ones(3,3,CvType.CV_32FC1);
        Core.multiply(a, b, dst);
        System.out.println("DST\n" + dst.dump());

但这会导致错误:

Mat dst = new Mat();

        Mat a = Mat.ones(3,3,CvType.CV_32FC1);
        Mat b = Mat.ones(1,3,CvType.CV_32FC1);

//neither this
        Core.multiply(a, b, dst); ///<<<< ERROR
//nor this works
        Core.multiply(a, b.t(), dst); ///<<<< ERROR
        System.out.println("DST\n" + dst.dump());

OpenCV 错误:输入参数的大小不匹配(操作是 既不是“数组运算数组”(其中数组具有相同的大小和相同的 通道数),也不是“数组操作标量”,也不是“标量操作数组”) cv::arithm_op,文件 C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\arithm.cpp, 第 1987 行

请帮助寻找解决方案。如何按向量对矩阵进行乘法运算?

【问题讨论】:

你看***.com/questions/10168058/…了吗? @SergeyS 哦。谢谢!还没找到。 【参考方案1】:

我不知道opencv框架,但根据错误信息,你的第二个代码示例中的b似乎是一个单行矩阵。你需要一个单列矩阵:

尝试像这样定义 b :

Mat b = Mat.ones(3,1,CvType.CV_32FC1);

【讨论】:

这与 b.t() 相同。我试过了。 显然这个乘法是一个一个元素的乘法,而不是你要找的矩阵乘法。【参考方案2】:

这是正确的解决方案:

Core.gemm(a, b, 1, new Mat(), 0, dst, 0);

改进了一点:

Basic matrix multiplication in OpenCV for android

【讨论】:

以上是关于向量乘法矩阵[重复]的主要内容,如果未能解决你的问题,请参考以下文章

稀疏矩阵 - 矩阵乘法

CUDA线程分配[重复]

numpy中的矩阵乘法很奇怪(m * m等于m.dot(m)!!!)[重复]

向量矩阵乘法、浮点向量、二进制矩阵

按列而不是行存储矩阵[重复]

向量乘法(矩阵乘法)奇数输出的向量