如何将 3d 整数数组减少到 2 维?

How to reduce 3d integer array to 2 dimensions?

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

我主要是在 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]

或者如果你有一个 3d 基元数组 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);

另请参阅:Finding the largest number in an array using predefined java methods