1

我想执行矩阵运算(例如找到给定矩阵 A 的转置矩阵)

我找到了一些这样做的库,例如 Colt:

http://acs.lbl.gov/software/colt/api/index.html

http://acs.lbl.gov/software/colt/api/cern/colt/matrix/package-summary.html

在第二个链接中提到,如果要打印转置,请键入:

System.out.println(matrix.viewDice());

但是,我不想打印转置矩阵。我想将它存储在具有适当尺寸的第二个矩阵中,例如 B。

有任何想法吗?

4

4 回答 4

0

你看过图书馆Apache Commons Math吗?例如:

public static void main(String[] args) {
    double[][] data = { { 1, 2, 3 }, { 4, 5, 6 } };

    RealMatrix matrix = MatrixUtils.createRealMatrix(data);

    RealMatrix transpose = matrix.transpose();
}
于 2013-10-11T16:35:46.867 回答
0

这是在la4j(Java 的线性代数)中转置矩阵的另一个示例:

// create simple 2D array matrix of double[][] array
Matrix a = new Basic2DMatrix(new double[] {
  { 1.0, 2.0, 3.0 },
  { 4.0, 5.0, 6.0 },
  { 7.0, 8.0, 9.0 }
});

// transpose out-of-place
Matrix b = a.transpose();

// output matrices  
System.out.println(a);
System.out.println(b);
于 2013-10-15T11:03:48.437 回答
0

使用 colt 库,您可以简单地做

DoubleMatrix2D transposed = matrix.viewDice();

viewDice() 方法返回一个 DoubleMatrix2D。

于 2015-12-03T11:12:40.810 回答
0

只是为了增加我的 2 美分,因为我正在考虑自己实现一个矩阵转置。

我们可以在原始的 java 2D 数组中添加一个包装器吗?

当您转置矩阵时,您根本不会转置实际数组,而只是在包装器中将其标记为 transpose=true。

当您想通过包装器访问 (3,2) 处的值时,包装器交换行和列索引并返回 (2,3) 处的值

您可以对其他操作执行相同的操作,直到“真正”需要实际的转置。

“真的”是指实际转置矩阵比使用原始矩阵具有计算性能优势,这主要取决于您将对矩阵执行的操作。

于 2016-02-19T06:25:16.537 回答