Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java矩阵运算,并行colt矩阵-矩阵乘法_Java_Multithreading_Matrix Multiplication_Colt - Fatal编程技术网

Java矩阵运算,并行colt矩阵-矩阵乘法

Java矩阵运算,并行colt矩阵-矩阵乘法,java,multithreading,matrix-multiplication,colt,Java,Multithreading,Matrix Multiplication,Colt,我在java中使用Jama进行矩阵运算,但由于它们没有稀疏矩阵,所以我开始使用。它是Colt的多线程版本。我试着乘两个平方矩阵,AxB(它是矩阵乘法,不是元素(或标量)乘法),size(NxN)。我在PColt中找不到提供的矩阵乘法方法(我不想要元素乘法),所以我将该方法编码如下。当我将N=1000的两个矩阵相乘时,需要花费将近5分钟的时间才能完成。 如果有人知道如何将pcolt中的两个矩阵相乘,那将非常感激。 或者,如果您看到代码中有任何不必要的错误,并且使复杂性很高,请通知我。我的方法如下:

我在java中使用Jama进行矩阵运算,但由于它们没有稀疏矩阵,所以我开始使用。它是Colt的多线程版本。我试着乘两个平方矩阵,AxB(它是矩阵乘法,不是元素(或标量)乘法),size(NxN)。我在PColt中找不到提供的矩阵乘法方法(我不想要元素乘法),所以我将该方法编码如下。当我将N=1000的两个矩阵相乘时,需要花费将近5分钟的时间才能完成。 如果有人知道如何将pcolt中的两个矩阵相乘,那将非常感激。 或者,如果您看到代码中有任何不必要的错误,并且使复杂性很高,请通知我。我的方法如下:

    /**
 * Linear algebraic matrix-matrix multiplication; (new)A = A x B. A[i,j] =
 * Sum(A[i,k] * B[k,j]), k=0..n-1. Matrix shapes: A(m x n), B(n x p), A(m x
 * p).
 * 
 * @param matrix1
 *            first matrix
 * @param matrix2
 *            second matrix
 * @return changes matrix1 with new values matrix-matrix multiplication
 */

public static FloatMatrix2D multiplyMatrix(FloatMatrix2D matrix1,
        FloatMatrix2D matrix2) {
    // create a matrix same size of input matrix
    FloatMatrix2D resultMatrix = matrix1.like();
    // matrix-matrix multiplication row of first matrix must be equal to
    // column of second matrix
    if (matrix1.rows() == matrix2.columns()) {
        for (int i = 0; i < matrix1.rows(); i++) {
            for (int j = 0; j < matrix2.columns(); j++) {
                FloatMatrix1D rowVec = getRow(matrix1, i).copy();
                FloatMatrix1D colVec = getCol(matrix2, j).copy();
                // first multiplies each row with each column and then sum
                // up the result and assign the result to value of matrix
                float multOfVects = rowVec.assign(colVec,
                        FloatFunctions.mult).aggregate(FloatFunctions.plus,
                        FloatFunctions.identity);
                // set sum of vectors to the new matrix
                resultMatrix.setQuick(i, j, multOfVects);
                
            }
            System.out.println(" i th row "+ i);
        }
    } else {
        System.err
                .println("Row size of first matrix must be equal to Column size of second matrix: "
                        + matrix1 + " != " + matrix2);
    }

    return resultMatrix;
}
线性代数矩阵乘法;C=A x B


在这里,请注意参数的顺序,因为结果将保存到最后一个参数
C
C
也可以设置为null,这会导致返回一个新的矩阵。

矩阵乘法方法在
doublegebrage
类中

DenseDoubleAlgebra algebra = new DenseDoubleAlgebra();
DoubleMatrix2D productMatrix = algebra.mult(aMatrix, anotherMatrix);
DenseDoubleAlgebra algebra = new DenseDoubleAlgebra();
DoubleMatrix2D productMatrix = algebra.mult(aMatrix, anotherMatrix);