J语言:读取大型二维矩阵

J Language: Reading large 2D matrix

我是 J 新手,正在尝试导入我的一个大型数据集以进行进一步实验。它是双打的二维矩阵,大约 80000x50000。到目前为止,我已经找到了两种不同的方法来将数据加载到 J.

首先是将数据转换为J格式(将负数替换为下划线,将指数符号数字转换为J格式等)然后加载(改编自J: Handy method to enter a matrix?):

(".;._2) fread 'path/to/file'

第二种方法是使用tables/dsv

我在使用这两种方法时遇到了同样的问题:即这些方法适用于小矩阵,但在大约 10M 值时失败。似乎输入只是被截断到某个任意限制。如何加载任意大小的矩阵?如果我必须转换成某种二进制格式,那没关系,只要某处有格式说明即可。

我应该补充一点,这是一个 64 位系统和 J 的构建,我可以成功地创建一个适当大小的随机数矩阵,所以它似乎不是每个矩阵大小的限制se 但仅在 I/O.

期间

谢谢!

编辑:我没有找到到底是什么导致了这个问题,但多亏了 Dane,我确实找到了使用 JMF('data/jmf' 包)的解决方法。事实证明,JMF 只是没有 header 的直接二进制数据,本机 (?) 或 little-endian 数据可以直接映射为 JFL map_jmf_ 'x';'whatever.bin'

您 运行 内存不足。快速测试一下 space 个整数占用了多少,结果如下:

   7!:2 'i. 80000 5000'
8589936256

也就是说,一个 80,000 x 5,000 的整数矩阵需要 8 GB 的内存。如果您的 80,000 x 50,000 矩阵是整数,则需要大约 80 GB 的内存。

你的下一个问题应该是关于对太大而无法加载到内存中的矩阵执行数组或矩阵运算。