数学中矩阵的乘法.
##矩阵乘法
####1、如果是两个矩阵相乘,必须保证A*B A矩阵的行数和B矩阵的列数相同
##相乘结果
##java方法实现随机矩阵,矩阵相乘等工作.
矩阵相乘想到的实现方式:(目前使用循环的方式来实现,下一步慢慢的采用下面的方式来实现效果)
####1、采用多线程的方式来做这个矩阵的乘法 ####2、采用master-worker的方式来做. ####3、hadoop Map-Reduce.
package com.wendy.test.matrix;
import java.util.Random;
/**
*
* 此工具类可以生成矩阵,计算两个矩阵的乘法. <b>NOTE:</b>
* <p>
* <b> 此矩阵中的算法只是简单的算法,需要优化</b>
* </p>
*
* <p>
* <dl>
* <dt>想到的方法:</dt>
* <dd>采用多线程的方式来做这个矩阵的乘法.</dd>
* <dd>采用master-worker的方式来做.</dd>
* <dd>hadoop Map-Reduce.</dd>
* </p>
*
*
*
* <b>time:</b>2015年3月13日
*
* @author admin
*
*/
public class MatrixUtil {
private static Random random = new Random();
private MatrixUtil() {
}
/**
* 查询某个数字在矩阵中出现的次数.
*
* @param matrix 二维数组.
* @param element 需要查找的元素.
* @return 次数.
*/
public static int count(int[][] matrix, int element) {
if (matrix == null) {
throw new NullPointerException("你输入的matirx为null哦!");
}
int count = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == element) {
count++;
}
}
}
return count;
}
/**
* 计算矩阵a和b的乘法运算. <b>NOTE:</b> a 的行数必须和b的列数相同.
*
* @param a
* 矩阵A.
* @param b
* 矩阵B.
* @return a X b 的结果.
*/
public static int[][] multiMatrix(int[][] a, int[][] b) {
if (a == null || b == null) {
System.out.println(" a and b is not null.");
return null;
}
int arows = a.length;
int bcolumn = b[0].length;
int matrix[][] = null;
if (arows == bcolumn) {
matrix = new int[arows][bcolumn];
for (int i = 0; i < arows; i++) {
for (int j = 0; j < bcolumn; j++) {
for (int k = 0; k < b[0].length; k++) {
// a[0][1]*b[1][0] a[0][2]*b[2][0]
matrix[i][j] += a[i][k] * b[k][j];
}
}
}
} else {
System.out.println("matrix 乘法规则不清楚哦!");
}
return matrix;
}
/**
* 根据行数和列数生成矩阵.
*
* @param column
* 列数.
* @param rows
* 行数.
* @param valueRange
* 矩阵里取值范围. 0~valueRange.
* @return <code>int[][]</code>
*/
public static int[][] randomMatrix(int column, int rows, int valueRange) {
if (rows < 0 || column < 0) {
System.out.println("Are you blind? ~~");
}
int matrix[][] = new int[rows][column];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = random.nextInt(valueRange);
}
}
return matrix;
}
/**
* 打印矩阵数据到控制台.
*
* @param matrix
* 矩阵数组.
* @param name
* 给矩阵起的小名字.
*/
public static void printMatrixData(int[][] matrix, String name) {
if (matrix == null) {
System.out.println("you should input nomal matrix data array,ok?");
}
System.out.println("矩阵[" + name + "] 大小为:[" + matrix.length + " X "
+ matrix[0].length + "]");
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j]);
System.out.print(" ");
}
System.out.println();
}
}
/**
* 根据输入参数生成一个二维数组的矩阵.
*
* @param size
* 矩阵大小在此size以内.
* @param valueSize
* 矩阵里面的值的大小在此valueSize之内.
* @return 生成的矩阵,<code>int[][]</code>
*/
public static int[][] randomMatrix(int size, int valueSize) {
if (size == 0) {
return new int[0][0];
}
int column = random.nextInt(size) + 1;
int row = random.nextInt(size) + 1;
int[][] matrix = new int[row][column];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = random.nextInt(valueSize);
}
}
return matrix;
}
}