矩阵乘法
- C语言代码
- C++ 语言代码
- Java语言代码
- Python语言代码
💐The Begin💐点点关注,收藏不迷路💐
|
计算两个矩阵的乘法:
设有矩阵(A)为(n×m)阶矩阵,矩阵(B)为(m×k)阶矩阵,二者相乘得到的矩阵(C)是(n×k)阶矩阵。
对于矩阵(C)中的元素(C[i][j])(其中(i)表示行序号,(j)表示列序号),其计算公式为:
[C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + … + A[i][m - 1]×B[m - 1][j]]。
输入
第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100
然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于1000。
输出
输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。
样例输入
3 2 3
1 1
1 1
1 1
1 1 1
1 1 1
样例输出
2 2 2
2 2 2
2 2 2
先获取矩阵 (A) 的行数 (n)、列数 (m) 以及矩阵 (B) 的列数 (k),然后分别读取两个矩阵的元素内容,接着初始化结果矩阵的元素为 (0),再通过三层嵌套循环按照矩阵乘法的规则(即 (C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + …+ A[i][m - 1]×B[m - 1][j]))计算结果矩阵每个元素的值,最后按照矩阵的格式输出相乘后的结果矩阵。
C语言代码
#include <stdio.h>
int main() {
int n, m, k;
scanf("%d %d %d", &n, &m, &k); // 读取矩阵A的行数n、列数m以及矩阵B的列数k
int matrixA[n][m]; // 定义二维数组存储矩阵A的元素
int matrixB[m][k]; // 定义二维数组存储矩阵B的元素
int result[n][k]; // 定义二维数组存储矩阵相乘的结果,其为n行k列
// 1. 读取矩阵A的元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &matrixA[i][j]); // 逐行逐列读取矩阵A的元素
}
}
// 2. 读取矩阵B的元素
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
scanf("%d", &matrixB[i][j]); // 逐行逐列读取矩阵B的元素
}
}
// 3. 初始化结果矩阵元素为0
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
result[i][j] = 0; // 将结果矩阵每个元素初始化为0
}
}
// 4. 计算矩阵乘法
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
for (int p = 0; p < m; p++) {
result[i][j] += matrixA[i][p] * matrixB[p][j]; // 根据矩阵乘法规则计算结果矩阵每个元素的值
}
}
}
// 5. 输出结果矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
printf("%d ", result[i][j]); // 逐行逐列输出结果矩阵元素
}
printf("\n");
}
return 0;
}
C++ 语言代码
#include <iostream>
using namespace std;
int main() {
int n, m, k;
cin >> n >> m >> k; // 输入矩阵A的行数n、列数m以及矩阵B的列数k
int matrixA[n][m]; // 创建二维数组存储矩阵A的元素
int matrixB[m][k]; // 创建二维数组存储矩阵B的元素
int result[n][k]; // 创建二维数组存储矩阵相乘的结果,为n行k列
// 1. 输入矩阵A的元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrixA[i][j]; // 逐行逐列输入矩阵A的元素
}
}
// 2. 输入矩阵B的元素
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
cin >> matrixB[i][j]; // 逐行逐列输入矩阵B的元素
}
}
// 3. 初始化结果矩阵元素为0
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
result[i][j] = 0; // 将结果矩阵每个元素初始化为0
}
}
// 4. 计算矩阵乘法
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
for (int p = 0; p < m; p++) {
result[i][j] += matrixA[i][p] * matrixB[p][j]; // 按照矩阵乘法规则计算结果矩阵各元素值
}
}
}
// 5. 输出结果矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
cout << result[i][j] << " "; // 逐行逐列输出结果矩阵元素
}
cout << endl;
}
return 0;
}
Java语言代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 获取矩阵A的行数n
int m = scanner.nextInt(); // 获取矩阵A的列数m
int k = scanner.nextInt(); // 获取矩阵B的列数k
int[][] matrixA = new int[n][m]; // 定义二维数组存储矩阵A的元素
int[][] matrixB = new int[m][k]; // 定义二维数组存储矩阵B的元素
int[][] result = new int[n][k]; // 定义二维数组存储矩阵相乘的结果,是n行k列
// 1. 读取矩阵A的元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
matrixA[i][j] = scanner.nextInt(); // 逐行逐列读取矩阵A的元素并存入数组
}
}
// 2. 读取矩阵B的元素
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
matrixB[i][j] = scanner.nextInt(); // 逐行逐列读取矩阵B的元素并存入数组
}
}
// 3. 初始化结果矩阵元素为0
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
result[i][j] = 0; // 将结果矩阵每个元素初始化为0
}
}
// 4. 计算矩阵乘法
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
for (int p = 0; p < m; p++) {
result[i][j] += matrixA[i][p] * matrixB[p][j]; // 依据矩阵乘法规则计算结果矩阵各元素值
}
}
}
// 5. 输出结果矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
System.out.print(result[i][j] + " "); // 逐行逐列输出结果矩阵元素
}
System.out.println();
}
}
}
Python语言代码
n, m, k = map(int, input().split()) // 获取矩阵A的行数n、列数m以及矩阵B的列数k
matrixA = [list(map(int, input().split())) for _ in range(n)] // 获取矩阵A的元素,构建二维列表
matrixB = [list(map(int, input().split())) for _ in range(m)] // 获取矩阵B的元素,构建二维列表
result = [[0] * k for _ in range(n)] // 创建一个n行k列的二维列表,初始值都为0,用于存储结果矩阵
# 计算矩阵乘法
for i in range(n):
for j in range(k):
for p in range(m):
result[i][j] += matrixA[i][p] * matrixB[p][j] // 根据矩阵乘法规则计算结果矩阵各元素值
# 输出结果矩阵
for row in result:
print(" ".join(map(str, row))) // 将每行的整数列表转换为字符串,用空格连接后输出
💐The End💐点点关注,收藏不迷路💐
|