Single-precision unit-spaced vector without conversion from double
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Robert Borkowski
am 21 Jan. 2020
Kommentiert: Steven Lord
am 21 Jan. 2020
Hi,
is there a fast way to create a unit-spaced vector (m:n) as single precision, and avoid conversion from double?
I want to avoid out-of-memory related errors. The following method may fail (with a "Conversion to single from double is not possible." error) if k is very large.
m = 0;
n = 10;
k=n-m+1;
x = zeros(k,1,'single');
x(1:k) = m:n;
I guess, it is not different, or perhaps even worse (double both for the vector AND for the index) than doing simply
x = single(m:n);
I'd like to generate each element of m:n already as single precision. One approach that comes to my mind is to divide the vector into parts and fill each part by conversion from a smaller double vector.
Is there any better method?
Thanks!
0 Kommentare
Akzeptierte Antwort
Steven Lord
am 21 Jan. 2020
Don't create the vector as a double array then convert the vector to single.
Convert the scalar values from double to single then build the vector by calling the colon operator : on the single scalars.
a = 0;
b = 1e5;
x = single(a:b);
as = single(a);
bs = single(b);
xs = as:bs;
2 Kommentare
Steven Lord
am 21 Jan. 2020
You can see more information about specifically which function would get called with certain inputs if you call the which function. See the "Locate Function Invoked with Given Input Arguments" example on the documentation page for the which function or just look below. With a, as, b, and bs as defined above in the workspace:
>> which -all colon(a, bs)
built-in (C:\Program Files\MATLAB\R2019b\toolbox\matlab\ops\@single\colon) % single method
>> which -all colon(as, bs)
built-in (C:\Program Files\MATLAB\R2019b\toolbox\matlab\ops\@single\colon) % single method
>> which -all colon(a, b)
built-in (C:\Program Files\MATLAB\R2019b\toolbox\matlab\ops\@double\colon) % double method
In the first two cases, MATLAB "knows" it needs to create a single vector while in the latter it creates a double vector.
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!