Single-precision unit-spaced vector without conversion from double

2 Ansichten (letzte 30 Tage)
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!

Akzeptierte Antwort

Steven Lord
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
Robert Borkowski
Robert Borkowski am 21 Jan. 2020
Bearbeitet: Robert Borkowski am 21 Jan. 2020
Great answer, thank you!
Do you know if
x1=a:bs
or
x2=as:b
implicitly converts the double operand into single BEFORE the vector is created, i.e., it's equivalent to your proposed as:bs syntax?
Steven Lord
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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by