【问题标题】:How can I multiply a matrix by a vector using JAMA?如何使用 JAMA 将矩阵乘以向量?
【发布时间】:2011-07-13 18:53:45
【问题描述】:

我正在尝试从一个双精度数组创建一个向量。然后我想将这个向量乘以一个矩阵。有谁知道我怎么能做到这一点?下面是一个我想开始工作的非常简单的例子。

// 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
...

【问题讨论】:

    标签: java vector matrix matrix-multiplication jama


    【解决方案1】:

    下面是通缉操作的简单示例:

    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]]
    

    换句话说就是:

    【讨论】:

    • @Jon: 请注意Matrix 类 API (math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html) 是您获得更多选择的朋友 :)
    • 嗨!抱歉,我是个白痴,但您能否举例说明当 [1 1 1] 变成 [2 5 3] 时会发生什么?
    • @Joehot200:矩阵乘法自学相当容易,this 应该让你清楚如何去做。本质上,您将“行乘列”相乘,然后将每个产品相加并相应地放置。
    • 对。知道了。谢谢。我不敢相信我已经学会了正弦、余弦、正切、向量乘法等,却从未遇到过矩阵向量乘法。
    【解决方案2】:

    为什么不能使用 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
    

    这就是我认为阅读 doc 会起作用的内容。

    【讨论】:

    • 我刚刚尝试了您的想法,但它似乎希望矩阵尺寸一致(即相同的行数和列数)。但是,由于向量只有一行,因此会引发异常。
    • 啊我的错!乘法矩阵有点棘手。并不是两个维度都必须一致(那会很无聊),只是内部维度必须一致。您仍然可以将上面的 a 和 b 相乘,但您需要转置 b。我已经编辑了答案。
    • 这不起作用,因为构造函数的参数不是Java语法...
    【解决方案3】:

    这个怎么样:

    double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
    Matrix A = new Matrix(vals);
    

    来自http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2018-05-31
      • 2018-02-23
      • 1970-01-01
      相关资源
      最近更新 更多