如何在非常大的数据集上绘制图形?

问题描述:

我有一个包含超过10,000行的文件。每行包含不同集群的数据。数据是一些整数。我的文件如下所示:如何在非常大的数据集上绘制图形?

1 2 
5 
4 6 10 
43 23 28 55 
12 
32 51 
56 39 90 
98 41 
9 
......... 
......... 

所有数字在文件中都是唯一的。每个群集中的数据数量可能不同。该文件是聚类算法的输出。现在我必须绘制这些数据的图表。如果文件包含不多于50,000个独特数据,则可以将该文件作为输入提供给matlab来绘制图形。但我的文件有超过2,00,000个独特的数据。因此,matlab显示如下错误信息:

"Out of memory. Type HELP MEMORY for your options" 

有一种可能的解决方案,我可以使用稀疏矩阵。但该文件是由群集算法的工具自动创建的。所以没有任何选项将输出作为稀疏矩阵的内容输出。 所以,我需要一个想法如何绘制这样庞大的数据图。除了matlab之外,还有其他软件(基于Linux还是基于Windows)来解决我的问题?我写了如下的matlab脚本:

clc; 
m=dlmread('C:\Users\Dhan\Desktop\clusteredResult_demo.txt'); 
plot(m); 
+1

2.000.000 datapoints,存储在uint16中只有'(2000000 * 2)/ 2^20 = 3.81 MB'因此内存不应该是一个问题我会说。你对数据做什么?你从哪里得到这个错误? – Gelliant

+0

我想绘制这些值的图表。从文件读取这些值时,发生错误。 –

+0

你假装看什么?如果您的屏幕宽度为2.000.000像素,则只有这样才能真正看到您的数据。这大约相当于1000个正常屏幕,这就是每个数据只有一个像素的情况。你确定这是你想要做的吗? –

你可以用这个脚本打开你的文件吗?通过这个脚本,我可以使用我的电脑在0.234789秒内用10.000行打开一个文件。

tic 
%open file 
fid = fopen('file.txt'); 
%allocate memory 
M=zeros(10000,6,'uint16'); 

%get data 
l=fgetl(fid); 
L=sum(l==' ')+1; 
v=textscan(l,'%u16',L); 
M(1,1:L)=v{:};ct=2; 
l=fgetl(fid); 
while ~isnumeric(l) 
    L=sum(l==' ')+1; 
    v=textscan(l,'%u16',L); 
    M(1,1:L)=v{:};ct=ct+1; 
    l=fgetl(fid); 
end 
fclose(fid); 
toc 

该问题可能是在接下来的步骤。你如何处理所有这些价值?

+0

我相信OPs问题是图形引擎耗尽内存,而不是MATLAB本身 –

+0

你能解释一下吗?我无法明白你的观点。 @AnderBiguri Biguri –

+0

当他执行“plot”时,他没有记忆,而不是当他加载数据时。因为plot需要java,openGL等东西。 'memory_data