Я ищу эффективный и быстрый способ памяти для измерения размеров многомерного массива в Java.Java: элементы порядка многомерного массива
Я имею в виду, чтобы преобразовать массив double[rows][cols][slices]
в массив double[slices][rows][cols]
. (Сравнимого с this Matlab function) Я знаю, что все элементы строки имеют одинаковое количество перевалов и все перевалы имеют одинаковое количество кусочков.
Я всегда работаю над отдельными ломтиками, что делает массивы double[rows][cols][slices]
очень неудобными. Я решил создать функцию getSlice(double[][][] array, int slice)
, но мой массив имеет размер несколько ГБ, и я довольно часто получаю доступ к срезам. Так что это, кажется, слишком избыточная работа.
Чтобы уточнить мой вопрос: С точки зрения скорости и использования памяти, есть ли лучший способ перестановки размеров массива, чем создание нового массива и копирование старого элемента по элементу? Или есть даже совершенно другой и более элегантный способ приблизиться к этому, которого я пропустил до сих пор?
ANSWER Я сейчас инкапсулировал данные, как было предложено. Для этого я также использовал классы ImagePlus, ImageStack и ImageProcessor от ImageJ, поскольку они уже предоставили большую часть необходимых мне функций. С точки зрения эффективности памяти они выглядят нормально.
Память эффективная * и * быстрая? Что бы вы предпочли, если бы у вас был только один? –
Это, наверное, глупый вопрос, но зачем вам нужны отдельные фрагменты как 'double [] []' экземпляры? Передаются ли эти срезы в качестве параметра методу, принимающему 'double [] []'? –
Несколько лет назад я использовал библиотеку [cern.colt.matrix] (https://dst.lbl.gov/ACSSoftware/colt/api/index.html), которая имеет ряд полезных матричных операций, подобных этому (не уверенный в эффективности , но, вероятно, лучше, чем строить что-то с нуля). – pmorken