java仿照MATLAB中的reshape,實現矩陣重塑
阿新 • • 發佈:2019-02-09
在MATLAB中,有一個非常有用的函式 reshape,它可以將一個矩陣重塑為另一個大小不同的新矩陣,但保留其原始資料。
給出一個由二維陣列表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。
重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。
如果具有給定引數的reshape操作是可行且合理的,則輸出新的重塑矩陣;否則,輸出原始矩陣。
public static int[][] matrixReshape(int[][] nums, int r, int c) {
if(nums == null){
return nums;
}
if(r == 0 || c == 0){
return nums;
}
int row = 0;//行
int columns = 0;//列
columns = nums[0].length;
row = nums.length;
if(columns > 100 || row > 100 || columns < 1 || row < 1){
return nums;
}
if (columns * row < r * c){
return nums;
}
int [][]result = new int[r][c];
int rr = 0;
int cc = 0;
int index = 0;
for(int i = 0; i < row; i ++){
for(int j = 0; j < columns; j ++){
index = i * columns + j + 1;
if (index > r * c){
break;
}
rr = index / c;//行
cc = index % c;//列
if(rr > 0 && cc ==0){
rr = rr -1;
cc = c - 1;
}else if(rr > 0 && cc > 0){
cc = cc -1;
}else{
cc = cc -1;
}
result[rr][cc] = nums[i][j];
}
}
return result;
}