我需要乘以两个矩阵。我很清楚矩阵是如何工作的,但是我发现这有点复杂,所以我研究了一下并发现了这一点。
public static int[][] multiply(int a[][], int b[][]) {
int aRows = a.length,
aColumns = a[0].length,
bRows = b.length,
bColumns = b[0].length;
int[][] resultant = new int[aRows][bColumns];
for(int i = 0; i < aRows; i++) { // aRow
for(int j = 0; j < bColumns; j++) { // bColumn
for(int k = 0; k < aColumns; k++) { // aColumn
resultant[i][j] += a[i][k] * b[k][j];
}
}
}
return resultant;
此代码工作正常。然而,问题是我需要将单维矩阵(1 * 5)乘以多维矩阵(5 * 4),因此结果将是(1 * 4)矩阵,然后在同一程序中乘以a (1 * 4)矩阵由(4 * 3)矩阵产生(1 * 3)。
我需要将单维矩阵存储在普通数组(double [])而不是多维数组中!
我将此代码更改为以下内容,但仍无法解析正确的结果。
public static double[] multiplyMatrices(double[] A, double[][] B) {
int xA = A.length;
int yB = B[0].length;
double[] C = new double[yB];
for (int i = 0; i < yB; i++) { // bColumn
for (int j = 0; j < xA; j++) { // aColumn
C[i] += A[j] * B[j][i];
}
}
return C;
提前感谢您提供的任何提示:)
答案 0 :(得分:0)
您可以使用RealMatrix来简化操作。
RealMatrix result = MatrixUtils.createRealMatrix(a).multiply(MatrixUtils.createRealMatrix(b));
double[] array = result.getRow(0);