编写两个矩阵相乘的方法(Java)

方法头如下:

public static double[][] multiplyMatrix(double[][] a, double[][] b)

为了使矩阵a能够和矩阵b相乘,矩阵a的列数必须与矩阵b的行数相同,并且两个矩阵的元素要具有相同或兼容的数据类型。假设矩阵c是相乘的结果,而a的列数是n,那么每个元素c[ij]=a[i1]*b[1j]+······+a[in]*b[nj]。

编写一个测试程序,提示用户输入两个3*3的矩阵,然后显示它们的乘积。

import java.util.Scanner;

	public class HomeWork6{
		public static double[][] multiplyMatrix(double[][] a, double[][] b){
			double[][] c = new double[3][3];
			for(int i=0; i<3; i++)
				for(int j=0; j<3; j++)
					c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j];
			return c;
					
		}
		public static void main(String[] args) {
			Scanner input = new Scanner(System.in);
			double[][] matrix1 = new double[3][3];
			double[][] matrix2 = new double[3][3];
			double[][] matrix3 = new double[3][3];
			System.out.print("Enter matrix1: ");
			for(int i=0; i<3; i++)
				for(int j=0; j<3; j++)
					matrix1[i][j] = input.nextDouble();
			System.out.print("Enter matrix2: ");
			for(int i=0; i<3; i++)
				for(int j=0; j<3; j++)
					matrix2[i][j] = input.nextDouble();
			System.out.println("The multiplication of the matrices is");
			matrix3 = multiplyMatrix(matrix1,matrix2);
			System.out.println(matrix1[0][0]+" "+matrix1[0][1]+" "+matrix1[0][2]+"      "+matrix2[0][0]+" "+matrix2[0][1]+" "+matrix2[0][2]+"      "+matrix3[0][0]+" "+matrix3[0][1]+" "+matrix3[0][2]);
			System.out.println(matrix1[1][0]+" "+matrix1[1][1]+" "+matrix1[1][2]+"      "+matrix2[1][0]+" "+matrix2[1][1]+" "+matrix2[1][2]+"      "+matrix3[1][0]+" "+matrix3[1][1]+" "+matrix3[1][2]);
			System.out.println(matrix1[2][0]+" "+matrix1[2][1]+" "+matrix1[2][2]+"      "+matrix2[2][0]+" "+matrix2[2][1]+" "+matrix2[2][2]+"      "+matrix3[2][0]+" "+matrix3[2][1]+" "+matrix3[2][2]);
		}
	}

运行结果:
在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,以下是一个简单的矩阵相乘的Hadoop实现的Java代码示例: ```java import java.io.IOException; import java.util.*; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; import org.apache.hadoop.mapreduce.*; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class MatrixMultiplication { public static class Mapper1 extends Mapper<LongWritable, Text, Text, Text> { public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] data = value.toString().split(","); if (data[0].equals("M")) { for (int k = 0; k < Integer.parseInt(context.getConfiguration().get("n")); k++) { context.write(new Text(data[1] + "," + k), new Text(data[0] + "," + data[2] + "," + data[3])); } } else { for (int i = 0; i < Integer.parseInt(context.getConfiguration().get("n")); i++) { context.write(new Text(i + "," + data[2]), new Text(data[0] + "," + data[1] + "," + data[3])); } } } } public static class Reducer1 extends Reducer<Text, Text, Text, Text> { public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { List<String> listM = new ArrayList<String>(); List<String> listN = new ArrayList<String>(); for (Text val : values) { String[] data = val.toString().split(","); if (data[0].equals("M")) { listM.add(val.toString()); } else { listN.add(val.toString()); } } for (String m : listM) { String[] dataM = m.split(","); for (String n : listN) { String[] dataN = n.split(","); context.write(new Text(dataM[1] + "," + dataN[2]), new Text(Integer.toString(Integer.parseInt(dataM[2]) * Integer.parseInt(dataN[2])))); } } } } public static class Mapper2 extends Mapper<LongWritable, Text, Text, Text> { public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] data = value.toString().split(","); context.write(new Text(data[0] + "," + data[1]), new Text(data[2])); } } public static class Reducer2 extends Reducer<Text, Text, Text, IntWritable> { public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { int sum = 0; for (Text val : values) { sum += Integer.parseInt(val.toString()); } context.write(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.set("n", args[3]); Job job1 = Job.getInstance(conf, "Matrix Multiplication Job 1"); job1.setJarByClass(MatrixMultiplication.class); job1.setMapperClass(Mapper1.class); job1.setReducerClass(Reducer1.class); job1.setOutputKeyClass(Text.class); job1.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job1, new Path(args[0])); FileOutputFormat.setOutputPath(job1, new Path(args[1])); job1.waitForCompletion(true); Job job2 = Job.getInstance(conf, "Matrix Multiplication Job 2"); job2.setJarByClass(MatrixMultiplication.class); job2.setMapperClass(Mapper2.class); job2.setReducerClass(Reducer2.class); job2.setOutputKeyClass(Text.class); job2.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job2, new Path(args[1])); FileOutputFormat.setOutputPath(job2, new Path(args[2])); System.exit(job2.waitForCompletion(true) ? 0 : 1); } } ``` 这个示例代码假设您已经将两个矩阵存储为CSV格式的文件,并将它们作为输入传递给MapReduce作业。您需要将矩阵的大小作为命令行参数传递给程序(这里使用“n”来表示矩阵的大小)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值