Re: BinaryReadList with Mixed Types
- To: mathgroup at smc.vnet.net
- Subject: [mg92996] Re: BinaryReadList with Mixed Types
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Wed, 22 Oct 2008 05:39:23 -0400 (EDT)
- References: <gdkaiv$4pt$1@smc.vnet.net>
Raffy wrote:
> When BinaryReadList is used with mixed types like
> {"UnsignedInteger32", "Real32"}, the speed at which it imports is
> incredibly slow.
>
> count = 10000;
>
> file = OpenWrite["Slow.dat", BinaryFormat -> True];
> BinaryWrite[file,
> Transpose@{RandomInteger[{0, 1}, count],
> RandomReal[{0, 1}, count]}, {"UnsignedInteger32", "Real32"}];
> Close[file];
>
> file = OpenWrite["Fast.dat", BinaryFormat -> True];
> BinaryWrite[file,
> RandomReal[{0, 1}, {count, 2}], {"Real32", "Real32"}];
> Close[file];
>
> BinaryReadList["Slow.dat", {"UnsignedInteger32", "Real32"}]; // Timing
> --- takes about 0.5 sec
> BinaryReadList["Fast.dat", {"Real32", "Real32"}]; // Timing --- a few
> ms at most
>
> Is there anyway I can fix this performance? The current speed is
> completely unacceptable.
>
> Thank you.
>
If nobody supplies a better solution, you could perform the binary read
in Java (using J/Link) and arrange to pass the integers and reals back
as separate arrays.
David Bailey
http://www.dbaileyconsultancy.co.uk