Multiplying Matrixes

Problem

You need to multiply a pair of two-dimensional arrays, as is common in mathematical and engineering applications.

Solution

Use the following code as a model.

Discussion

It is straightforward to multiply an array of a numeric type. The code in Example 5-3 implements matrix multiplication.

Example 5-3. Matrix.java

/** 
 * Multiply two matrices. 
 * Only defined for int: clone the code (or wait for Templates) 
 * for long, float, and double. 
 */ 
public class Matrix { 
 
    /* Matrix-multiply two arrays together. 
     * The arrays MUST be rectangular. 
     * @author Tom Christiansen & Nathan Torkington, Perl Cookbook version. 
     */ 
    public static int[][] multiply(int[][] m1, int[][] m2) { 
        int m1rows = m1.length; 
        int m1cols = m1[0].length; 
        int m2rows = m2.length; 
        int m2cols = m2[0].length; 
        if (m1cols != m2rows) 
            throw new IllegalArgumentException(
        int[][] result = new int[m1rows][m2cols]; 
 
        // multiply 
        for (int i=0; i<m1rows; i++) 
            for (int j=0; j<m2cols; j++) 
                for (int k=0; k<m1cols; k++) 
                result[i][j] += m1[i][k] * m2[k][j]; 
 
        return result; 
    } 
 
    public static void mprint(int[][] a) { 
        int rows = a.length; 
        int cols = a[0].length; 
        System.out.println("array["+rows+"]["+cols+"] = {"); 
        for (int i=0; i<rows; i++) { 
            System.out.print("{"); 
            for (int j=0; j<cols; j++) 
                System.out.print(" " + a[i][j] + ","); 
            System.out.println("},"); 
        } 
        System.out.println(":;"); 
    } 
}

Here is a program that uses the Matrix class to multiply two arrays of ints:

// MatrixUse.java int x[][] = { { 3, 2, 3 }, { 5, 9, 8 }, }; ...

Get Java Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.