Fast conversion of 2 matrices to 1 complex matrix
Show older comments
Hi,
After reading my data from an external binary file, I have a 3 dimensional array representing one complex matrix, like this:
A(1,:,:) = rand(10); % real part
A(2,:,:) = rand(10); % imaginary part
I need to convert that into a complex matrix, e.g.
A = complex(A(1,:,:), A(2,:,:));
But this is rather slow. As far as I have been able to find out, Matlab stores complex matrices internally as two matrices, one for the real and one for the imaginary part. This is about the same as my original 3-dimensional matrix -- and should be quite fast! My assumption therefore is that Matlab uses a temporary variable which of course needs to be allocated, resulting in slow code.
Is it possible to make Matlab do this conversion without allocating more memory? Maybe just setting the 'complex' attribute to A... It might be possible using mex files, but I never used them before, and I would prefer a 'pure' Matlab solution.
Any comments, hints or keywords I can google for are welcome!
Regards Argon
Accepted Answer
More Answers (2)
Wayne King
on 24 Oct 2012
Edited: Wayne King
on 24 Oct 2012
A(1,:,:) = randn(100);
A(2,:,:) = randn(100);
B = squeeze(A(1,:,:)+1i*A(2,:,:));
Seems pretty fast to me, is your matrix really big?
James Tursa
on 8 Jul 2020
0 votes
See this FEX submission for reading and writing interleaved complex data in R2018a or later without extra data copies:
See this FEX submission for reinterpreting an existing real variable as interleaved complex or vice-versa in R2018a or later:
2 Comments
Muhammad
on 11 Jul 2024
Hi James,
I have the signal in complex format, I want to convert it to .dat form but not interleaved. I tried the fwritecomplex but it didn't help as it interleaved the data. I want to save each complex value as single value not interleaved. Is it possible?
Thanks in advance.
James Tursa
on 11 Jul 2024
Edited: James Tursa
on 11 Jul 2024
Can you clarify what you want to do? Preferably with a very small example? Show exactly what you are starting with and exactly what you want as an end result. E.g., if you want data written to a file show excatly how you want it written to the file with the example data. Also what MATLAB version are you running with? The approach is very different depending on whether you are using R2018a & later vs R2017b & earlier. Thanks.
Categories
Find more on Numeric Types in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!