Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何使用memmapfile()读取交错数据?_Matlab_File Io_Binaryfiles_Bigdata_Memory Mapped Files - Fatal编程技术网

Matlab 如何使用memmapfile()读取交错数据?

Matlab 如何使用memmapfile()读取交错数据?,matlab,file-io,binaryfiles,bigdata,memory-mapped-files,Matlab,File Io,Binaryfiles,Bigdata,Memory Mapped Files,我想访问一个大的(4GB+)数据文件。它包含许多不同信号的样本i{a,b,c,如下所示: a_1 b_1 c_1 a_2 b_2 c_2 .... a_n b_n c_n 我想使用来检索,比如说,a流。因为我知道信号的数量和样本的数量,所以我尝试: m = memmapfile('data.dat','Format',{'int16',[nSignals 1],'sid'},'repeat',nSamples); 但这将返回无用的m字段 当然,以下方法很好,但速度非常慢: m = memma

我想访问一个大的(4GB+)数据文件。它包含许多不同信号的样本i{abc,如下所示:

a_1 b_1 c_1 a_2 b_2 c_2 .... a_n b_n c_n
我想使用来检索,比如说,a流。因为我知道信号的数量和样本的数量,所以我尝试:

m = memmapfile('data.dat','Format',{'int16',[nSignals 1],'sid'},'repeat',nSamples);
但这将返回无用的m字段

当然,以下方法很好,但速度非常慢:

m = memmapfile('data.dat','Format','int16');
a = m.Data(1:nSignals:end);

如何恢复a而不必访问完整的数据矩阵?

如何使用FREAD并指定适当的
跳过
值。以下内容将一次性读取信号
a

% 3 interleaved signals each of type int16
nSignals = 3;

% amount of bytes to skip after reading each sample
szINT16 = 2;                   % sizeof(int16)=2
skipBytes = (nSignals-1)*szINT16;

% number of samples in each signal (Inf to read all samples)
nSamples = Inf;

fid = fopen('data.dat','rb');
a = fread(fid, nSamples, '*int16', skipBytes);
fclose(fid);
您可以对其他两个信号执行相同的操作,只需寻找正确的起始位置:

fseek(fid, szINT16*1, 'bof');
b = fread(fid, nSamples, '*int16', skipBytes);

fseek(fid, szINT16*2, 'bof');
c = fread(fid, nSamples, '*int16', skipBytes);

也许你可以尝试一下:

m = memmapfile('data.dat', 
               'Format', 
               { 'int16'  [1 1] 'a'; 'int16' [1 1] 'b'; 'int16' [1 1] 'c'}, 
               'Repeat', nSamples);

a = m.Data(:).a; % extract all instances of a
m = memmapfile('data.dat', 
               'Format', 
               { 'int16'  [1 1] 'a'; 'int16' [1 1] 'b'; 'int16' [1 1] 'c'}, 
               'Repeat', nSamples);

a = m.Data(:).a; % extract all instances of a