java - 如何将 3d 整数数组减少为二维?
问题描述
我有一个 3d 整数数组,我想通过计算沿第三维的最大值将其减少到二维。
我本质上是numpy.amax(array, axis=3)
在寻找java。我也试过自己实现这个功能,但我的代码很慢。有谁知道如何在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);
推荐阅读
- git - 如何获取我创建的新分支作为它的克隆的分支名称
- shortcut - 快捷方式应用中显示的重复操作?
- go - 如何使用 errorgroup 捕获错误?
- c - 类函数宏的嵌套调用
- python - 在熊猫数据框中获取一周的最小值
- android-studio-3.0 - Android Studio:找不到构建工具修订版 30.0.3
- python - Android 上的 TFLite 模型精度更差
- javascript - Angular + Angularfire 实时更新在移动设备上不起作用
- c++ - 具有不可复制成员的复制赋值运算符
- android-studio - 自动补全在 buildSrc 内的 Android Studio 北极狐中不起作用