Python基础练习 矩阵乘法

164 阅读1分钟

Python基础练习 矩阵乘法

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

思路:矩阵的零次幂是与该矩阵同型的单位矩阵!

问题描述

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22

输入输出

  • 输入格式

  第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值。

  • 输出格式

  输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开。

  • 样例输入

   2 2

   1 2

   3 4

  • 样例输出

   7 10

   15 22

Python版本 代码如下

本题不支持numpy库,注意。详细解法如下:

while True:
    try:
        def matrixMul(matrix1, matrix2, n):
            c = [[0 for m1 in range(n)]for m in range(n)]
            for i in range(n):
                for j in range(n):
                    for k in range(n):
                        c[i][j] += matrix1[i][k] * matrix2[k][j]
            return c

        n = list(map(int, input().split()))
        s = []
        result = []
        for j in range(n[0]):
            s.append(list(map(int, input().split())))
        if n[1] == 0:
            for i in range(0, n[0]):
                for j in range(0, n[0]):
                    if i == j:
                        result[i][j] = 1
                    else:
                        result[i][j] = 0
        else:
            for k in range(n[1]-1):
                result = matrixMul(result,s,n[0])
        for i in range(0, result.__len__()) :
            for j in range(0, result[i].__len__()) :
                print(result[i][j], '', end='')
            print('')
    except:
        break

Java版本 代码如下

import java.util.Scanner;

public class matrixMul{
	static int n, m;
	static Scanner sc = new Scanner(System.in);
	
	public static void main(String[] args) {
		n = sc.nextInt();
		m = sc.nextInt();
		long[][] nums = new long[n+1][n+1];
		long[][] result= new long[n+1][n+1];
		for(int i = 0;i<n;i++) {
			for(int j = 0;j<n;j++) {
				result[i][j] = nums[i][j] = sc.nextLong();
			}
		}
		
		if(m==0) {
			for(int i = 0;i<n;i++) {
				for(int j = 0;j<n;j++) {
					if(i==j) {System.out.print(1+" ");
					}else {System.out.print(0+" ");
					}
				}System.out.println();
			}
		}else {
			while(m>1) {
				long[][] temps = new long[n+1][n+1];
				for(int i =0;i<n;i++) {
					for(int j = 0;j<n;j++) {
						long temp = 0;
						for(int k = 0;k<n;k++) {
							temp = temp + numsResult[i][k]*nums[k][j];
						}temps[i][j] = temp;
					}
				}numsResult = temps; m--;
			}
			for(int i = 0;i<n;i++) {
				for(int j = 0;j<n;j++) {
					System.out.print(numsResult[i][j]+" ");
				}System.out.println();
			}
		}
	}
}

参考博客:
Python版本 & Java版本