我想执行矩阵运算(例如,查找给定矩阵 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。
有什么想法吗?
你看过图书馆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();
}
这是在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);
使用柯尔特库,您可以简单地做
DoubleMatrix2D transposed = matrix.viewDice();
viewDice() 方法返回一个 DoubleMatrix2D。
只是为了添加我的 2 美分,因为我正在考虑自己实现矩阵转置。
我们可以在原始 java 2D 数组中添加一个包装器吗?
当你转置矩阵时,你根本不会转置实际的数组,而只是在包装器中将其标记为transpose=true。
当您想通过包装器访问 (3,2) 处的值时,包装器会交换行索引和列索引并返回 (2,3) 处的值
您可以对其他操作执行相同的操作,直到"真正"需要实际转置。
我所说的"真的"是指实际的转置矩阵比使用原始矩阵具有计算性能优势,这主要取决于您将在矩阵上执行的操作。
在我的一个家庭作业中,作为我学位的一部分,我们被要求将矩阵带到一个函数,并创建一个带有矩阵转置的新文件 txt。我在下面附上我的解决方案。我希望它能帮助某人:)
public static void transposedMatrixToFile(int[][] mat, String fileName) throws IOException {
int[][] transposedMatrix = new int[mat[0].length][mat.length];
for(int row = 0; row < mat.length; row++) {
for(int col = 0; col < mat[0].length; col++) {
transposedMatrix[col][row] = mat[row][col];
}
}
String fileNameString = fileName + ".txt";
File file = new File(fileNameString);
file.createNewFile();
FileWriter myWriter = new FileWriter(fileNameString);
for(int i = 0; i < transposedMatrix.length; i++) {
for(int j = 0; j < transposedMatrix[0].length; j++) {
myWriter.write("" + transposedMatrix[i][j] + " ");
}
myWriter.write("n");
}
myWriter.close();
}