【发布时间】:2016-01-04 23:37:28
【问题描述】:
我正在寻找一种内存高效且快速的方法来置换 Java 中多维数组的维度。
我的意思是将数组double[rows][cols][slices] 转换为数组double[slices][rows][cols]。(类似于this Matlab function)我知道所有行元素具有相同数量的列并且所有列具有相同数量的切片.
我总是在单个切片上工作,这使得double[rows][cols][slices] 数组非常不方便。我考虑创建一个getSlice(double[][][] array, int slice) 函数,但我的数组有几个 GB 的大小,而且我经常访问切片。所以这似乎是多余的工作。
准确地说我的问题: 在速度和内存使用方面,有没有比创建新数组并逐个元素复制旧数组更好的方法来排列数组维度?或者是否有一种完全不同且更优雅的方式来解决我迄今为止错过的问题?
回答 我现在按照建议封装了数据。为此,我还使用了来自ImageJ 的 ImagePlus、ImageStack 和 ImageProcessor 类,因为它们已经提供了我需要的大部分功能。从内存效率的角度来看,它们似乎还可以。
【问题讨论】:
-
内存效率和快?如果你只能拥有一个,你更喜欢哪一个?
-
这可能是一个愚蠢的问题,但是为什么您实际上需要将单个切片作为
double[][]实例?这些切片是否作为参数传递给接受double[][]的方法? -
几年前,我使用了 cern.colt.matrix 库,其中包含许多有用的矩阵运算(不确定效率,但可能比从头开始构建更好)。
-
“有没有比创建一个新数组并逐个元素复制旧数组更好的方法来置换数组维度?”不,不是在 Java 中。在其他语言中,您可以假设数组元素是连续的,并且可以通过一个内存进程获取一个维度,尽管内存移动仍然一次完成一个地址。
-
@AndyTurner:因为我只需要做一次,所以我会选择内存高效
标签: java arrays multidimensional-array