-1

无论如何在 MATLAB 中进行二次采样可以阅读吗?输入数据如下所示:

id=3,age=25, 0.5 0.5 0.2 0.6 0.6 0.5

id=1,age=15, 0.5 0.8 0.2 0.9 0.6 0.9

id=7,age=24, 0.5 0.2 0.9 0.6 0.1 0.5

(已编辑)对于 LAST SIX 列,我只想要三的倍数的列(即 LAST SIX COLUMNS 中的第 3 列和第 6 列,相当于整个数据文件中的第 5 列和第 8 列)被阅读。也就是说,像这样的矩阵:

0.2 0.5

0.2 0.9

0.9 0.5

理想情况下,代码如下所示:

for line=1:maxLine
  header(line,:) = fscanf(fid,'id=%d,age=%d,',[1,2]);
  content(line,:) = fscanf(fid,'only read columns multiple of three');
end;

我知道我可以读取整行和子样本,问题是,我正在处理的数组规模很大,10k+ 列,我不想消耗太多内存。

4

1 回答 1

0

有一种方法:如果你使用fopen,你只能访问一次文件,所以你不能循环访问。因此,您需要将所有必要的数据加载到一个数组中,然后对其进行转置。通过忽略一些元素来实现您节省空闲内存的愿望:

 fid = fopen('new.txt','r');
 A = fscanf(fid, 'id=%d,age=%d, %*f %*f %f %*f %*f %f\n', [4 inf]) 

我使用了你的数据并得到了这个结果:

A =

    3.0000    1.0000    7.0000
   25.0000   15.0000   24.0000
    0.2000    0.2000    0.9000
    0.5000    0.9000    0.5000

你可以在这里阅读http://www.mathworks.com/help/matlab/ref/fscanf.html?searchHighlight=fscanf fscanf将数据读入列,这就是我们需要转置它的原因。所以使用A=A'给出你想要的结果:

A =

    3.0000   25.0000    0.2000    0.5000
    1.0000   15.0000    0.2000    0.9000
    7.0000   24.0000    0.9000    0.5000

现在,如果需要,您可以制作两个不同的矩阵。

于 2015-09-23T15:15:48.910 回答