java - 如何从矩阵中获取子矩阵?
问题描述
我有一个任务,我必须打开一个文本文件(matrix.txt)并从文件中获取两个矩阵,矩阵 A 和矩阵 B。一旦我得到这些矩阵,我必须将它们变成四个相等或接近相等大小的矩阵.
前任。
A = [{A_00, A_01}, {A_10, A_11}]
我必须对从文本文件中获得的两个矩阵执行此操作,然后将它们加在一起以获得新矩阵 C。
前任。
C = [{A_00+B_00, A_01+B_01}, {A_10+B_10, A_11+B_11}]
我能够正确地从文本文件中获取矩阵,但是现在我有我的矩阵 A 和 BI 不知道如何将它们变成它们各自的子矩阵。如果有人能指出我正确的方向,那将不胜感激!如果需要,我可以提供作业文件以帮助提供更多说明。
给出的文本文件示例
4 7
2 3 1 2 5 1 2
3 1 2 2 2 4 4
1 2 3 2 7 2 1
3 6 1 5 1 3 5
6 5 4 1 4 3 1
3 3 2 2 1 1 2
7 5 4 3 2 5 3
2 1 8 4 8 4 4
到目前为止,这是我的代码
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
public class MatrixThread {
public static Scanner scan;
public static void main(String[] args) {
if(args.length == 0){
System.out.println("File name not specified");
System.exit(1);
}
try{
File matrix = new File(args[0]);
scan = new Scanner(matrix);
} catch (IOException ioException) {
System.err.println("Cannot open file.");
System.exit(1);
}
ThreadOperation Operation = new ThreadOperation();
Operation.executeOperation();
}
}
-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
class ThreadOperation extends MatrixThread {
void executeOperation(){
int N = scan.nextInt();
int M = scan.nextInt();
int A[][] = new int [N][M];
int B[][] = new int [N][M];
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j)
{
if(scan.hasNextInt())
{
A[i][j] = scan.nextInt();
}
}
}
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j)
{
if(scan.hasNextInt())
{
B[i][j] = scan.nextInt();
}
}
}
/*int C[][] = new int [N][M];
for (int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
C[i][j] = A[i][j] + B[i][j];
System.out.print(C[i][j] + " ");
}
System.out.print("\r\n");*/
}
}
}
给出的示例文件所需的输出将是:
N = 4, M = 7
Matrix A:
2 3 1 2 5 1 2
3 1 2 2 2 4 4
1 2 3 2 7 2 1
3 6 1 5 1 3 5
Matrix B:
6 5 4 1 4 3 1
3 3 2 2 1 1 2
7 5 4 3 2 5 3
2 1 8 4 8 4 4
Submatrix A_00:
2 3 1 2
3 1 2 2
Submatrix A_01:
5 1 2
2 4 4
Submatrix A_10:
1 2 3 2
3 6 1 5
Submatrix A_11:
7 2 1
1 3 5
Submatrix B_00:
6 5 4 1
3 3 2 2
Submatrix B_01:
4 3 1
1 1 2
Submatrix B_10:
7 5 4 3
2 1 8 4
Submatrix B_11:
2 5 3
8 4 4
Submatrix C_00:
8 8 5 3
6 4 4 4
Submatrix C_01:
9 4 3
3 5 6
Submatrix C_10:
8 7 7 5
5 7 9 9
Submatrix C_11:
9 7 4
9 7 9
Matrix C:
8 8 5 3 9 4 3
6 4 4 4 3 5 6
8 7 7 5 9 7 4
5 7 9 9 9 7 9
解决方案
怎么样
A00[][] = new int[N / 2][M / 2];
for (int i = 0; i < A00.length; i++) {
for (int j = 0; j < A00[0].length; j++) {
A00[i][j] = A[i][j];
}
}
A01[][] = new int[N / 2][M - M/2];
for (int i = 0; i < A01.length; i++) {
for (int j = 0; j < A01[0].length; j++) {
A01[i][j] = A[i][M/2 + j];
}
}
并进行类似的计算以获得其他子矩阵。
推荐阅读
- javascript - 关于 emscripten 回调函数数据指针
- php - 遵循教程后 PHP 显示 HTML
- mysql - 特定查询的 SQL 订单结果计数
- spring - 是否可以在 spring-boot application.yaml 或 properties 中使用占位符 ${} 作为属性 KEY
- java - 为什么在类与方法级别声明 Java 通用类型通过编译
- ios - 具有自定义集合视图布局的 Diffable 数据源?
- php - 即使在定义了命名空间之后,在 PhpStorm 中也会出现“未定义的常量 '__NAMESPACE__'”错误
- java - 无论 DST 如何,都可以在正确的时间检索日期
- postgresql - PostgreSQL - COPY 上的左填充值
- reactjs - useEffect 陷入无限循环