我有一个矩阵和一个数组,我想从数组值中填充矩阵。
float [][] mat = new float [m][n];
float [] array= new float [3];
例如:
arr = {1,2,3}
尺寸为4 * 4的垫子
mat =
{1, 2, 3, 1
2, 3, 1, 2
3, 1, 2, 3
1, 2, 3, 1}
填充矩阵的方式是什么?
答案 0 :(得分:0)
根据您的示例,您想使用数组中的值在矩阵中插入行。
首先,让我们构建矩阵和数组值:
int m = 3;
int n = 5;
float[][] mat = new float[m][n];
float[] array = {1,2,3,4};
然后,迭代矩阵以准备更新:
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
// update here
}
}
因此,您想要的是使用数组来设置值,当到达末尾时,您将从头开始。我看到了两种解决方案:
我们增加它的数量,但是当我们到达数组的长度时,使用模将其恢复为“ 0”。
int currentIndex = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
mat[i][j] = array[currentIndex];
currentIndex = (currentIndex + 1 ) % array.length;
}
}
或者您可以通过对矩阵的两个索引进行求和然后再次使用模数来获得索引,这允许更新任何值而无需循环(如果需要)
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
mat[i][j] = array[(i+j)%array.length];
}
}
此解决方案的一个问题是,您不会获得m + n > Integer.MAX_VALUE
矩阵的正确输出,这仅仅是因为和将给出负值,给出错误的索引。
您可以使用来查看结果:
System.out.println(java.util.Arrays.deepToString(mat));
两种解决方案都可以:
[
[1.0, 2.0, 3.0, 4.0, 1.0],
[2.0, 3.0, 4.0, 1.0, 2.0],
[3.0, 4.0, 1.0, 2.0, 3.0]
]
答案 1 :(得分:-1)
没有必要指定第二个数组大小:float [][] mat = new float [m][];
这是一个如何声明数组矩阵的示例:
int m = 5;
float[][] mat = new float[m][];
float[] array = new float[3];
for (int i = 0; i < m; i++) {
mat[i] = array;
}