Java 将三维阵列展平为一维阵列
如何在java中将3D数组转换为一维数组 我使用了下面的代码:Java 将三维阵列展平为一维阵列,java,arrays,Java,Arrays,如何在java中将3D数组转换为一维数组 我使用了下面的代码: input :double [][][]S_p = { { { 1.1, 2.1 }, { 3.2, 4.1 } }, { { 5.2, 6.1 }, { 7.1, 8.3 } } }; int rows = S_p.length; int columns = S_p[0].length; int depth = S_p[0][0].length; double [] d1 = new double[row*colu
input :double [][][]S_p = { { { 1.1, 2.1 }, { 3.2, 4.1 } },
{ { 5.2, 6.1 }, { 7.1, 8.3 } } };
int rows = S_p.length;
int columns = S_p[0].length;
int depth = S_p[0][0].length;
double [] d1 = new double[row*columns*depth];
for(int i=0;i<depth;i++) {
for(int j=0;j<rows;j++){
for(int k=0;k<columns;k++) {
for(int ii=0;ii<rows*columns*depth;ii++) {
d1 [ii] = S_p[ depth *rows *i + columns *k +j];
}
}
}
out put b[]= {1.1, 2.1, 3.2 , 4.1 ...}
input:double[]S_p={{{{{1.1,2.1},{3.2,4.1},
{ { 5.2, 6.1 }, { 7.1, 8.3 } } };
int rows=S_p.length;
int columns=S_p[0]。长度;
int depth=S_p[0][0]。长度;
double[]d1=新的双精度[行*列*深度];
对于Java 8中的(inti=0;i),您只需执行以下操作:
double[][][] vals = {{{1.1, 2.1}, {3.2, 4.1}}, {{5.2, 6.1}, {7.1, 8.3}}};
double[] test = Arrays.stream(vals)
.flatMap(Arrays::stream)
.flatMapToDouble(Arrays::stream)
.toArray();
System.out.println(Arrays.toString(test));
输出:
[1.1, 2.1, 3.2, 4.1, 5.2, 6.1, 7.1, 8.3]
说明:
Arrays.stream(VAL)
创建流
.flatMap(Arrays::stream)
将其展平为流
.flatMapToDouble
将流
展平为双流
最后,.toArray()
收集DoubleStream
中的所有值,并返回一个double[]
在Java 8中,您只需执行以下操作:
double[][][] vals = {{{1.1, 2.1}, {3.2, 4.1}}, {{5.2, 6.1}, {7.1, 8.3}}};
double[] test = Arrays.stream(vals)
.flatMap(Arrays::stream)
.flatMapToDouble(Arrays::stream)
.toArray();
System.out.println(Arrays.toString(test));
输出:
[1.1, 2.1, 3.2, 4.1, 5.2, 6.1, 7.1, 8.3]
说明:
Arrays.stream(VAL)
创建流
.flatMap(Arrays::stream)
将其展平为流
.flatMapToDouble
将流
展平为双流
最后,.toArray()
收集双流
中的所有值,并返回一个double[]
您的方法是正确的,但是您没有正确地乘以坐标。确保正确的一个好方法是使用Horner方案的自适应:value_x+上限_x*(y值+y的上限*(…)
此外,最内部的循环是多余的,您应该能够使用上述方法计算S\p
的索引
int rows = S_p.length;
int columns = S_p[0].length;
int depth = S_p[0][0].length;
double[] d1 = new double[rows * columns * depth];
for (int i = 0; i < depth; i++) {
for (int j = 0; j < rows; j++) {
for (int k = 0; k < columns; k++) {
d1[i + depth*(j + rows*(k))] = S_p[j][k][i];
}
}
}
int rows=S\u p.length;
int columns=S_p[0]。长度;
int depth=S_p[0][0]。长度;
double[]d1=新的双精度[行*列*深度];
for(int i=0;i
您的方法是正确的,但是您没有正确地乘以坐标。确保正确的一个好方法是使用霍纳方案的改编:值x+上界x*(值y+上界y*(…)
此外,最内部的循环是多余的,您应该能够使用上述方法计算S\p
的索引
int rows = S_p.length;
int columns = S_p[0].length;
int depth = S_p[0][0].length;
double[] d1 = new double[rows * columns * depth];
for (int i = 0; i < depth; i++) {
for (int j = 0; j < rows; j++) {
for (int k = 0; k < columns; k++) {
d1[i + depth*(j + rows*(k))] = S_p[j][k][i];
}
}
}
int rows=S\u p.length;
int columns=S_p[0]。长度;
int depth=S_p[0][0]。长度;
double[]d1=新的双精度[行*列*深度];
for(int i=0;i
你的输入和预期输出是什么?你尝试的代码有什么问题吗?你的问题非常不清楚,你的示例无法按原样编译。你有行*列*深度
单元格。没有必要进行如此深入的迭代,你已经用前三个浏览了所有单元格以查找
循环。你的输入是什么预期的输出是什么?您尝试的代码有什么问题?您的问题非常不清楚,您的示例无法按原样编译。您有行*列*深度
单元格。没有必要进行如此深入的迭代,您已经用前三个for
循环浏览了所有单元格。Java 8方法不错。有没有办法但是,指定不同的索引顺序?很好的Java 8方法。但是,有没有一种方法可以指定不同的索引顺序?