如何将 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
我有一个 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