【问题标题】:Simple matrix operations (2D & 3D) using Colt library使用 Colt 库的简单矩阵运算(2D 和 3D)
【发布时间】:2013-10-17 10:31:41
【问题描述】:

我想在我的代码中执行简单的矩阵运算,我使用 Colt 库

(见此处:http://acs.lbl.gov/software/colt/api/index.html

例如,我想添加/减去/乘以矩阵,添加/减去/乘/除一个标量到矩阵的每个单元格等...但是这个库中似乎没有这样的功能。

但是,我发现了这条评论:https://stackoverflow.com/a/10815643/2866701

如何使用 assign() 命令在我的代码中执行这些简单的操作?

【问题讨论】:

    标签: java matrix add scalar colt


    【解决方案1】:

    Colt 在assign() 方法下提供了一个更通用的框架。例如,如果您想为矩阵的每个单元格添加一个标量,您可以执行以下操作:

    double scalar_to_add  = 0.5;
    DoubleMatrix2D matrix = new DenseDoubleMatrix2D(10, 10); // creates an empty 10x10 matrix
    matrix.assign(DoubleFunctions.plus(scalar_to_add)); // adds the scalar to each cell
    

    标准函数可用作DoubleFunctions 类中的静态方法。其他的需要你自己写。

    如果您想要添加向量而不是仅仅添加一个标量值,assign() 的第二个参数需要是 DoubleDoubleFunction。例如,

    DoubleDoubleFunction plus = new DoubleDoubleFunction() {
        public double apply(double a, double b) { return a+b; }
    };    
    DoubleMatrix1D aVector = ... // some vector
    DoubleMatrix1D anotherVector = ... // another vector of same size
    aVector.assign(anotherVector, plus); // now you have the vector sum
    

    【讨论】:

      【解决方案2】:

      为什么不试试la4j(Java 的线性代数)?使用方便:

      Matrix a = new Basci2DMatrix(new double[][]{
          { 1.0, 2.0 },
          { 3.0, 4.0 }
      });
      
      Matrix b = new Basci2DMatrix(new double[][]{
          { 5.0, 6.0 },
          { 7.0, 8.0 }
      });
      
      Matrix c = a.multiply(b); // a * b
      Matrix d = a.add(b); // a + b
      Matrix e = a.subtract(b); // a - b
      

      还有类似于 Colt 的 assign()transform() 方法。可以如下使用:

      Matrix f = a.transform(Matrices.INC_MATRIX); // inreases each cell by 1
      Matrix g = a.transform(Matrices.asDivFunction(2)); // divides each cell by 2
      // you can define your own function
      Matrix h = a.transform(new MatrixFunction {
        public double evaluate(int i, int j, int value) {
          return value * Math.sqrt(i + j);
        }
      });
      

      但它只适用于 2D 矩阵。

      【讨论】:

      • 我想要一个适用于 1D-2D-3D 矩阵的库...而且我还想要数值分析,而不仅仅是线性代数...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多