我正在处理原始成像质谱数据。这种数据非常类似于传统的图像文件,除了不是3个颜色通道,我们有与我们测量的离子数量相对应的通道(在我的例子中,300)。数据最初以专有格式存储,但可以作为表格导出到.txt文件,格式为:
x,y,z,i(强度),m(质量)
可以想象,文件可能很大。典型图像可能是256 x 256 x 20,给出1310720像素。如果每个都有300个质量通道,则会得到一个包含393216000行和5列的表。这太棒了!因而无法融入记忆。即使我选择较小的数据子集(例如单个质量),文件也很慢。相比之下,专有软件能够非常快速地加载和处理这些文件,例如只需要一两秒就可以将文件打开到内存中。
我希望我已经说清楚了。有谁能解释一下?怎么可能有两个基本上包含完全相同数据的文件可以有不同的大小和速度?如何更快地处理图像数据矩阵?
答案 0 :(得分:1)
任何人都能解释一下吗?
是的
如果两个基本上包含完全相同数据的文件可以具有不同的大小和速度?
R 正在使用双打是默认数字类型。因此,您的数据框只有大约16Gb的存储空间。专有软件最有可能使用float作为底层类型,从而将内存需求降低到8Gb。
如何更快地处理图像数据矩阵?
购买32Gb的电脑。即使使用32Gb计算机,也要考虑在 R 中使用data.table并通过引用完成操作,因为 R 喜欢复制数据帧。
或者您可能希望转移到Python / pandas进行处理,并明确使用dtype = float32
更新
如果你想留在 R ,请看看bigmemory包,link,虽然我会说处理它不适合心脏衰弱的人
答案 1 :(得分:0)
这个问题的答案对我的数据集来说有点深奥且非常具体,但可能对其他人感兴趣。我的数据非常稀疏 - 即我矩阵中的大多数值都是零。因此,我能够使用Matrix
包(大写重要)来显着减小数据的大小,该包旨在更有效地处理稀疏矩阵。为了实现这个包,我刚刚插入了一行:
data <- Matrix(data)
节省的空间量将根据数据集的稀疏程度而有所不同,但在我的情况下,我将1.8 GB减少到156 Mb。 Matrix
的行为与matrix
一样,因此无需更改其他代码,速度也没有明显变化。稀疏性显然是专有格式可以利用的东西。