Я собираюсь использовать Clojure и Incanter для обработки большого набора научных данных; в частности, версия этого набора данных на 0,5 градуса (доступна только в двоичном формате).
Мой вопрос: какие у вас есть рекомендации по элегантным способам решения этой проблемы в Java / Clojure? Есть ли простой способ передать этот набор данных в Incanter или какой-нибудь другой пакет java-матрицы?
Мне удалось прочитать двоичные данные в java.nio.ByteBuffer
, используя следующий код:
(defn to-float-array [^String str]
(-> (io/to-byte-array (io/to-file str))
java.nio.ByteBuffer/wrap
(.order java.nio.ByteOrder/LITTLE_ENDIAN)))
Теперь я действительно борюсь с тем, как начать управлять этим ByteBuffer
как массивом. Я использовал Python NumPy, который позволяет очень легко манипулировать этими огромными наборами данных. Вот код Python для того, что я хочу сделать:
// reshape row vector into (time, lat_slices, lon_slices)
// then cut out every other row
rain_data = np.fromfile("path/to/file", dtype="f")
rain_data = rain_data.reshape(24, 360, 720);
rain_data = rain_data[0:23:2,:,:];
После этого нарезания Я хочу вернуть вектор из этих двенадцати массивов. (Мне нужно управлять каждым из них по отдельности в качестве входных данных будущих функций.)
Поэтому я буду очень признателен за любые советы о том, как получить этот набор данных в Incanter.