如何将三维整数数组缩小为二维



我有一个三维整数数组,我想通过计算第三维的最大值将其减少到二维。

我本质上是在寻找java中的numpy.amax(array, axis=3)。我也尝试过自己实现这个功能,但我的代码非常慢。有人知道如何在java中高效地执行此操作吗?

您可以迭代这个3d数组,其中每个元素都是2d数组⇒遍历2d数组,其中每个元素都是1d数组⇒得到1d数组的最大值。为此,您可以使用Stream.max(Comparator)方法:

Integer[][][] arr3d = {
{{10, 11, 12}, {13, 14, 15}, {16, 17, 18}},
{{19, 20, 21}, {22, 23, 24}, {25, 26, 27}},
{{28, 29, 30}, {31, 32, 33}, {34, 35, 36}}};
Integer[][] result = Arrays.stream(arr3d).map(arr2d ->
Arrays.stream(arr2d).map(arr1d ->
Arrays.stream(arr1d)
.max(Comparator.comparingInt(Integer::intValue))
.orElse(null))
.toArray(Integer[]::new))
.toArray(Integer[][]::new);
Arrays.stream(result).map(Arrays::toString).forEach(System.out::println);
// [12, 15, 18]
// [21, 24, 27]
// [30, 33, 36]

或者,如果您有一个基元int[][][]的三维阵列,您可以使用IntStream.max()方法:

int[][] result = Arrays.stream(arr3d).map(arr2d ->
Arrays.stream(arr2d).mapToInt(arr1d ->
Arrays.stream(arr1d)
.max()
.orElse(0))
.toArray())
.toArray(int[][]::new);

另请参阅:使用预定义的java方法查找数组中的最大数

最新更新