3

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

(见这里:http ://acs.lbl.gov/software/colt/api/index.html )

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

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

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

4

2 回答 2

4

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()需要是 a 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
于 2014-01-22T11:03:37.043 回答
0

为什么不试试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

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

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);
  }
});

但它只适用于二维矩阵。

于 2013-10-18T12:34:31.127 回答