<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/162445</link>
    <title>MATLAB Central Newsreader - load part of .mat (fast)</title>
    <description>Feed for thread: load part of .mat (fast)</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Tue, 22 Jan 2008 16:06:59 -0500</pubDate>
      <title>load part of .mat (fast)</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/162445#410654</link>
      <author>Andreas Lobinger</author>
      <description>Aloha,&lt;br&gt;
&lt;br&gt;
in my field of work (simulation) you can get pretty fast&lt;br&gt;
pretty large amounts of data.&lt;br&gt;
&lt;br&gt;
In one of our tools therefore we use the append option of&lt;br&gt;
save to save consecutive buffers to a .mat file.&lt;br&gt;
&lt;br&gt;
The file then contains something like&lt;br&gt;
buff_0&lt;br&gt;
buff_1&lt;br&gt;
buff_2&lt;br&gt;
buff_3&lt;br&gt;
etc.&lt;br&gt;
&lt;br&gt;
with a structure told by whos&lt;br&gt;
&amp;nbsp;&amp;gt;&amp;gt; pre = whos('-file','/homes/lobingera/Channel.SINR.mat')&lt;br&gt;
&lt;br&gt;
pre =&lt;br&gt;
&lt;br&gt;
57x1 struct array with fields:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;global&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sparse&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;complex&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nesting&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;gt;&amp;gt; pre(1)&lt;br&gt;
&lt;br&gt;
ans =&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name: 'buff_0'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size: [1260 50 100]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes: 50400000&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class: 'double'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;global: 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sparse: 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;complex: 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nesting: [1x1 struct]&lt;br&gt;
&lt;br&gt;
We have a function to read it back again to memory by concatenating&lt;br&gt;
the buffers.&lt;br&gt;
&lt;br&gt;
At the moment i'm extending this facility to read only some of the&lt;br&gt;
buffers.&lt;br&gt;
&lt;br&gt;
The problem is:&lt;br&gt;
load('filename.mat','buff_0','buff_1)&lt;br&gt;
has somehow linear search time.&lt;br&gt;
If i read n variables, it will need time n. If i read the file&lt;br&gt;
completely it will need only time ~1.5.&lt;br&gt;
&lt;br&gt;
Is there a 'fast' method to read consecutive parts of a .mat file?&lt;br&gt;
&lt;br&gt;
Hoping for an answer and wishing a happy day,&lt;br&gt;
		LOBI</description>
    </item>
    <item>
      <pubDate>Tue, 22 Jan 2008 18:04:08 -0500</pubDate>
      <title>Re: load part of .mat (fast)</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/162445#410693</link>
      <author>Peter Boettcher</author>
      <description>Andreas Lobinger &amp;lt;newsreturns@biszumknie.de&amp;gt; writes:&lt;br&gt;
&lt;br&gt;
&amp;gt; Aloha,&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; in my field of work (simulation) you can get pretty fast&lt;br&gt;
&amp;gt; pretty large amounts of data.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; In one of our tools therefore we use the append option of&lt;br&gt;
&amp;gt; save to save consecutive buffers to a .mat file.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; The file then contains something like&lt;br&gt;
&amp;gt; buff_0&lt;br&gt;
&amp;gt; buff_1&lt;br&gt;
&amp;gt; buff_2&lt;br&gt;
&amp;gt; buff_3&lt;br&gt;
&amp;gt; etc.&lt;br&gt;
&lt;br&gt;
&amp;gt; The problem is:&lt;br&gt;
&amp;gt; load('filename.mat','buff_0','buff_1)&lt;br&gt;
&amp;gt; has somehow linear search time.&lt;br&gt;
&amp;gt; If i read n variables, it will need time n. If i read the file&lt;br&gt;
&amp;gt; completely it will need only time ~1.5.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Is there a 'fast' method to read consecutive parts of a .mat file?&lt;br&gt;
&lt;br&gt;
I recommend instead switching to a simple binary format.  You will find&lt;br&gt;
it much faster, and you can implement your own random reads with almost&lt;br&gt;
no overhead.  This is especially true since each buffer appears to be a&lt;br&gt;
3D double-precision array.&lt;br&gt;
&lt;br&gt;
fopen the file at the beginning of the simulation, then successively&lt;br&gt;
fwrite each array.  fclose at the end&lt;br&gt;
&lt;br&gt;
When it's time to read, fopen the file.  Then fseek to the offset of the&lt;br&gt;
buffer you want.&lt;br&gt;
&lt;br&gt;
-Peter</description>
    </item>
    <item>
      <pubDate>Tue, 22 Jan 2008 18:24:01 -0500</pubDate>
      <title>Re: load part of .mat (fast)</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/162445#410696</link>
      <author>Malcolm Lidierth</author>
      <description>Or use the &quot;where&quot; function available at&lt;br&gt;
&quot;&lt;a href=&quot;http://www.mathworks.com/matlabcentral/fileexchange/loadFil&quot;&gt;http://www.mathworks.com/matlabcentral/fileexchange/loadFil&lt;/a&gt;&lt;br&gt;
e.do?objectId=12250&amp;objectType=FILE&quot;&lt;br&gt;
to get the data offsets for your variables.&lt;br&gt;
&lt;br&gt;
You can then fread from a mat file or memory map the &lt;br&gt;
variables with memmapfile. &lt;br&gt;
&lt;br&gt;
Where requires files to be saved with the -v6 option (which &lt;br&gt;
is faster anyway with large files- your speed problems &lt;br&gt;
probably arise because load is uncompressing the first n-1 &lt;br&gt;
variables to locate the nth: save compresses the variable &lt;br&gt;
header and the data in one go)</description>
    </item>
    <item>
      <pubDate>Tue, 22 Jan 2008 18:56:01 -0500</pubDate>
      <title>Re: load part of .mat (fast)</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/162445#410702</link>
      <author>per isakson</author>
      <description>Andreas Lobinger &amp;lt;newsreturns@biszumknie.de&amp;gt; wrote in &lt;br&gt;
message &amp;lt;fn54b3$13p$1@daniel-new.mch.sbs.de&amp;gt;...&lt;br&gt;
&amp;gt; Aloha,&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; in my field of work (simulation) you can get pretty fast&lt;br&gt;
&amp;gt; pretty large amounts of data.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; In one of our tools therefore we use the append option of&lt;br&gt;
&amp;gt; save to save consecutive buffers to a .mat file.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; The file then contains something like&lt;br&gt;
&amp;gt; buff_0&lt;br&gt;
&amp;gt; buff_1&lt;br&gt;
&amp;gt; buff_2&lt;br&gt;
&amp;gt; buff_3&lt;br&gt;
&amp;gt; etc.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; with a structure told by whos&lt;br&gt;
&amp;gt;  &amp;gt;&amp;gt; pre = whos('-&lt;br&gt;
file','/homes/lobingera/Channel.SINR.mat')&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; pre =&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; 57x1 struct array with fields:&lt;br&gt;
&amp;gt;      name&lt;br&gt;
&amp;gt;      size&lt;br&gt;
&amp;gt;      bytes&lt;br&gt;
&amp;gt;      class&lt;br&gt;
&amp;gt;      global&lt;br&gt;
&amp;gt;      sparse&lt;br&gt;
&amp;gt;      complex&lt;br&gt;
&amp;gt;      nesting&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;  &amp;gt;&amp;gt; pre(1)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; ans =&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;         name: 'buff_0'&lt;br&gt;
&amp;gt;         size: [1260 50 100]&lt;br&gt;
&amp;gt;        bytes: 50400000&lt;br&gt;
&amp;gt;        class: 'double'&lt;br&gt;
&amp;gt;       global: 0&lt;br&gt;
&amp;gt;       sparse: 0&lt;br&gt;
&amp;gt;      complex: 0&lt;br&gt;
&amp;gt;      nesting: [1x1 struct]&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; We have a function to read it back again to memory by &lt;br&gt;
concatenating&lt;br&gt;
&amp;gt; the buffers.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; At the moment i'm extending this facility to read only &lt;br&gt;
some of the&lt;br&gt;
&amp;gt; buffers.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; The problem is:&lt;br&gt;
&amp;gt; load('filename.mat','buff_0','buff_1)&lt;br&gt;
&amp;gt; has somehow linear search time.&lt;br&gt;
&amp;gt; If i read n variables, it will need time n. If i read the &lt;br&gt;
file&lt;br&gt;
&amp;gt; completely it will need only time ~1.5.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Is there a 'fast' method to read consecutive parts of &lt;br&gt;
a .mat file?&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Hoping for an answer and wishing a happy day,&lt;br&gt;
&amp;gt; 		LOBI&lt;br&gt;
&lt;br&gt;
save with the '-v6' option is faster since it doesn't &lt;br&gt;
compress data. / per</description>
    </item>
  </channel>
</rss>

