日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

matlab mat文件 太大,MATLAB .mat文件中的开销过大

發(fā)布時(shí)間:2025/3/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab mat文件 太大,MATLAB .mat文件中的开销过大 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這對(duì)我來(lái)說(shuō)似乎是個(gè)錯(cuò)誤.解決方法是以塊的形式寫(xiě)入預(yù)分配的數(shù)組.

從預(yù)先分配開(kāi)始:

fid = fopen('01_hit12.par', 'r');

data = fread(fid, inf, 'uint8');

nlines = nnz(data == 10) + 1;

fclose(fid);

matObj.moleculeNumber = zeros(1,nlines,'uint8');

matObj.isotopeologueNumber = zeros(1,nlines,'uint8');

matObj.vacuumWavenumber = zeros(1,nlines,'double');

matObj.lineIntensity = zeros(1,nlines,'double');

matObj.airWidth = zeros(1,nlines,'single');

matObj.selfWidth = zeros(1,nlines,'single');

matObj.lowStateE = zeros(1,nlines,'single');

matObj.tempDependWidth = zeros(1,nlines,'single');

matObj.pressureShift = zeros(1,nlines,'single');

然后以10000塊的形式寫(xiě)入,我修改了你的代碼如下:

... % your code plus pre-alloc first

bs = 10000;

while ischar(hitranTemp)

if abs(hitranTemp(1)) == 32;

hitranTemp(1) = '0';

end

for ii = 1:bs,

hitran{ii} = textscan(hitranTemp,'%2u%1u%12f%10f%10f%5f%5f%10f%4f%8f%15c%15c%15c%15c%6u%2u%2u%2u%2u%2u%2 u%1c%7f%7f','delimiter','','whitespace','');

hitranTemp = fgetl(fidr);

if hitranTemp==-1, bs=ii; break; end

end

% this part really ugly, sorry! trying to keep it compact...

matObj.moleculeNumber(1,k:k+bs-1) = uint8(builtin('_paren',cellfun(@(c)c{1},hitran),1:bs));

matObj.isotopeologueNumber(1,k:k+bs-1) = uint8(builtin('_paren',cellfun(@(c)c{2},hitran),1:bs));

matObj.vacuumWavenumber(1,k:k+bs-1) = builtin('_paren',cellfun(@(c)c{3},hitran),1:bs);

matObj.lineIntensity(1,k:k+bs-1) = builtin('_paren',cellfun(@(c)c{4},hitran),1:bs);

matObj.airWidth(1,k:k+bs-1) = single(builtin('_paren',cellfun(@(c)c{5},hitran),1:bs));

matObj.selfWidth(1,k:k+bs-1) = single(builtin('_paren',cellfun(@(c)c{6},hitran),1:bs));

matObj.lowStateE(1,k:k+bs-1) = single(builtin('_paren',cellfun(@(c)c{7},hitran),1:bs));

matObj.tempDependWidth(1,k:k+bs-1) = single(builtin('_paren',cellfun(@(c)c{8},hitran),1:bs));

matObj.pressureShift(1,k:k+bs-1) = single(builtin('_paren',cellfun(@(c)c{9},hitran),1:bs));

k = k + bs;

fprintf('.');

end

fclose(fidr);

磁盤(pán)上的最終大小為21,393,408字節(jié).用法分解為,

>> S = whos('-file','01_hit12.mat');

>> fileBytes = sum([S.bytes]);

>> T = dir(which('01_hit12.mat'));

>> diskBytes = T.bytes; ratio = diskBytes/fileBytes;

>> fprintf('%10d whos\n%10d disk\n%10.6f\n',fileBytes,diskBytes,ratio)

8531608 whos

21389582 disk

2.507099

效率仍然相當(dāng)?shù)?但并非失控.

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的matlab mat文件 太大,MATLAB .mat文件中的开销过大的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。