gpt4 book ai didi

java - 在java中获取子矩阵的引用

转载 作者:行者123 更新时间:2023-12-01 17:37:58 24 4
gpt4 key购买 nike

我需要递归地并行处理子矩阵(原始矩阵分为 4 个,传递给一个方法)。矩阵存储为二维数组。我无法每次都将元素复制到新矩阵,因为它非常昂贵。有没有办法在java中引用子矩阵?

也许问题没说清楚,我没有得到答案here .

最佳答案

我会围绕 int[][] 数据编写一个包装器,并将其称为 Matrix 类。然后编写一个方法getSubMatrix(x, y, rows, cols)。这是一个简单的 Matrix 类:

static class Matrix {
int[][] data;
int x, y, columns, rows;

public Matrix(int[][] data) {
this(data, 0, 0, data.length, data[0].length);
}

private Matrix(int[][] data, int x, int y, int columns, int rows) {
this.data = data;
this.x = x;
this.y = y;
this.columns = columns;
this.rows = rows;
}

public Matrix getSubMatrix(int x, int y, int columns, int rows) {
return new Matrix(data, this.x + x , this.y + y, columns, rows);
}

public String toString() {

StringBuffer sb = new StringBuffer();

for (int i = y; i < x + rows; i++) {
for (int j = x; j < x + columns; j++)
sb.append(data[i][j]).append(" ");

sb.append("\n");
}
sb.setLength(sb.length() - 1);

return sb.toString();
}
}

这个测试程序...:

public static void main(String[] args) throws IOException {

int[][] testData = new int[10][10];

for (int i = 0; i < testData.length; i++)
for (int j = 0; j < testData[i].length; j++)
testData[i][j] = 100 + i + j;

Matrix full = new Matrix(testData);

System.out.println("Full test matrix:");
System.out.println(full);

System.out.println();

System.out.println("Part of the matrix:");
System.out.println(full.getSubMatrix(3, 3, 3, 3));

}

...打印:

Full test matrix:
100 101 102 103 104 105 106 107 108 109
101 102 103 104 105 106 107 108 109 110
102 103 104 105 106 107 108 109 110 111
103 104 105 106 107 108 109 110 111 112
104 105 106 107 108 109 110 111 112 113
105 106 107 108 109 110 111 112 113 114
106 107 108 109 110 111 112 113 114 115
107 108 109 110 111 112 113 114 115 116
108 109 110 111 112 113 114 115 116 117
109 110 111 112 113 114 115 116 117 118

Part of the matrix:
106 107 108
107 108 109
108 109 110

关于java - 在java中获取子矩阵的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4358591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com