Can someone please explain why in example A the result is 1x6 vector (which makes sense and was what I was expecting) whereas in example B the result is 1x4 vector?
In example B if I predefine the size of newvec to be a 1x6 vector then the result is the correct 1x6 vector. Just not understanding what is going on.
Example A
vec = [0 2 3 0 5 0] %1x6
newvec(vec == 0) = 1 %produces a 1 x 6 vector
Example B
vec = [0 2 3 0 5 3] %1 x 6
newvec(vec == 0) = 1 %produces a 1 x 4 vector
If newvec
doesn't exist when you call the second line, MATLAB only makes it as large as it needs to hold the indexes you're setting to 1
.
What you're actually doing is:
newvec([1 4 6]) = 1;
or
newvec([1 4]) = 1;
Similarly if vec
was actually a 2D/3D etc. matrix, newvec
will come out as 1 x N
, where N is whatever the highest index number is, and not retain the shape of the original matrix.
So, in these cases you need to either:
1) preallocate newvec
to be the size of vec
first.
2) Do newvec = (vec==0)
instead
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With