如何使用JAMA将矩阵乘以向量?

5

我想从一个double数组中创建一个向量,并希望将该向量乘以矩阵。有人知道我如何实现吗?以下是一个非常简单的示例,我希望能够使其工作。

// Create the matrix (using JAMA)
Matrix a = new Matrix( [[1,2,3],[1,2,3],[1,2,3]] );

// Create a vector out of an array
...

// Multiply the vector by the matrix
...
3个回答

13

这是一个所需操作的简单示例:

double[][] array = {{1.,2.,3},{1.,2.,3.},{1.,2.,3.}}; 
Matrix a = new Matrix(array);   
Matrix b = new Matrix(new double[]{1., 1., 1.}, 1);     
Matrix c = b.times(a);  
System.out.println(Arrays.deepToString(c.getArray()));

结果:

[[3.0, 6.0, 9.0]]
换句话说,就是:

enter image description here


1
@Jon:注意Matrix类API(http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html)是你的好伙伴,可以获得更多选项 :) - Grzegorz Szpetkowski
你好!很抱歉我可能有点傻,但是你能否给我们一个例子,当[1 1 1]变成[2 5 3]时会发生什么? - Joehot200
@Joehot200:矩阵乘法是相当容易自学的,这个链接可以让你清楚地了解如何进行矩阵乘法。本质上,你需要将“行乘以列”,然后将每个乘积相加并放置在相应的位置。 - Grzegorz Szpetkowski
好的,明白了,谢谢。我简直不敢相信,在学习正弦、余弦、正切、向量乘法等等方面,我居然从未接触过矩阵-向量乘法。 - Joehot200

1
为什么不能使用Matrix的arrayTimes方法?向量只是一个1 x n矩阵(我想),所以你不能初始化一个只有1维的第二个矩阵并使用arrayTimes吗?
Matrix a = new Matrix( [[1,2,3],[1,2,3],[1,2,3]] );
Matrix b = new Matrix( [[1,2,3]] ); // this is a vector
Matrix c = a.arrayTimes(b.transpose); // transpose so that the inner dimensions agree

从我阅读文档的内容来看,我认为这个方案是可行的。


1
我刚刚尝试了你的想法,但似乎需要矩阵的维数相同(即行数和列数相同)。然而由于向量只有一行,它会抛出异常。 - user843337
啊,我的错误!矩阵相乘有点棘手。不是两个维度都要匹配(那会很无聊),只是内部维度必须匹配。你仍然可以将a和b相乘,但需要转置b。我已经编辑了答案。 - Ziggy
1
这不起作用是因为构造函数的参数不符合Java语法... - kiltek

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接