我希望使用 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 的建议都将不胜感激。