Fast conversion of 2 matrices to 1 complex matrix
Mostrar comentarios más antiguos
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
Respuesta aceptada
Más respuestas (2)
Wayne King
el 24 de Oct. de 2012
Editada: Wayne King
el 24 de Oct. de 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?
1 comentario
Argon
el 24 de Oct. de 2012
James Tursa
el 8 de Jul. de 2020
0 votos
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 comentarios
Muhammad
el 11 de Jul. de 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
el 11 de Jul. de 2024
Editada: James Tursa
el 11 de Jul. de 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.
Categorías
Más información sobre Numeric Types en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!