矩阵乘法(java)

该博客展示了一段Java代码,定义了MultiMatrix类,在main方法中初始化两个二维数组表示矩阵,调用mMatrix方法实现矩阵乘法,将结果存储在multiplyMatrix中,最后通过display方法输出结果,实现了矩阵乘法的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MultiMatrix {
 int[][] multiplyMatrix; 
    public static void main(String args[]){ 
       int[][] a={{1,0,3,-1},{2,1,0,2}};
       int[][] b={{4,1,0},{-1,1,3},{2,0,1},{1,3,4}};
     
    MultiMatrix mm=new MultiMatrix();
    mm.mMatrix(a,b);
    mm.display();  

}
    public void mMatrix(int[][] a,int[][] b){       
        multiplyMatrix=new int[a.length][b[0].length];
        for (int i = 0; i<a.length; i++) {//rows of a
         for (int j = 0; j<b[0].length; j++) {//columns of b
               for (int k = 0; k<a[0].length; k++) {//columns of a = rows of b
                  multiplyMatrix[i][j]=multiplyMatrix[i][j]+a[i][k]*b[k][j];
       }      
     }
     }       
     }
    public void display(){
       for (int i = 0; i<multiplyMatrix.length; i++) {
         for (int j = 0; j<multiplyMatrix[0].length; j++) {
          System.out.print (multiplyMatrix[i][j]+" ");
          
      }
       System.out.println ("");
    }
     }   
}

### Java MapReduce 实现矩阵乘法 为了实现基于MapReduce框架下的矩阵乘法,可以遵循以下模式。此过程涉及将矩阵分解成更小的任务以便于分布式处理。 #### Mapper阶段 Mapper负责读取输入数据并将它们转换为适合后续计算的形式。对于矩阵\(A\)和\(B\)乘法而言,在mapper函数中会针对每一个元素创建键值对,这些键值对表示了最终结果矩阵中的位置以及参与该位置计算的相关因子。具体来说: - 对于来自第一个矩阵(假设称为`Matrix A`)的数据项\((i, j, value)\),输出键值对<key(i,k), (A, j, value)>。 - 同样地,对于第二个矩阵(`Matrix B`)中的条目\((j, k, value)\),则生成<key(i,k), (B, j, value)>作为输出[^3]。 ```java public class MatrixMultiplyMapper extends Mapper<LongWritable, Text, IntPair, MatrixValue> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] line = value.toString().split(","); int row = Integer.parseInt(line[0]); int col = Integer.parseInt(line[1]); double val = Double.parseDouble(line[2]); // Assuming input format is "row,col,val" if ("A".equals(line[3])) { // For matrix A for (int k = 0; k < COLUMNS_B; ++k) { context.write(new IntPair(row, k), new MatrixValue('A', col, val)); } } else { // For matrix B for (int i = 0; i < ROWS_A; ++i) { context.write(new IntPair(i, col), new MatrixValue('B', row, val)); } } } } ``` 这里定义了一个自定义类型的`IntPair`用于存储复合键——即目标矩阵的位置;而另一个自定义类`MatrixValue`用来携带额外的信息,比如源矩阵标识符及其对应的索引与权重。 #### Reducer阶段 Reducer接收由具有相同键的所有中间记录组成的列表,并执行实际的乘积累加操作来构建结果矩阵的一部分。当接收到一组共享同一<i,k></i>坐标的映射输出时,它能够识别哪些来自于哪个原始矩阵并通过累加以获得相应的积和。 ```java public class MatrixMultiplyReducer extends Reducer<IntPair, MatrixValue, IntPair, DoubleWritable> { private static final int MAX_MATRIX_SIZE = 10; public void reduce(IntPair key, Iterable<MatrixValue> values, Context context) throws IOException, InterruptedException { double[][] tempMatrices = new double[MAX_MATRIX_SIZE][MAX_MATRIX_SIZE]; for (MatrixValue v : values) { char sourceMatrix = v.getSource(); int index = v.getIndex(); switch(sourceMatrix){ case 'A': for(int c=0;c<COLUMNS_B;++c){ tempMatrices[index][c]+=v.getValue()*bValues.get(c); } break; default://'B' bValues.put(index,v.getValue()); } } // Calculate the sum of products and emit it. double result = Arrays.stream(tempMatrices).flatMapToDouble(Arrays::stream).sum(); context.write(key, new DoubleWritable(result)); } } ``` 上述代码片段展示了如何在一个简化版本里完成这一逻辑。注意这里的`tempMatrices`是为了说明目的所使用的临时结构,在真实应用中可能不需要显式声明这样的二维数组,而是直接利用流式的累积求和方式提高效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值