create empty row inside a vector

Hi. I need to analyze the rows of the vector 'value_GS_test' and transform only the numbers 254 and 255 (if any) into '[]' while keeping the same number of rows as in the original vector. Here is an example:
Right now I am using this code, but it only deletes one row (at 255) for me. How can I get the desired result?
value_GS = importdata("value_GS_test.mat"); % 6 elements
for rows_value_GS = 1 %:height(value_GS)
analysis_number = value_GS(rows_value_GS);
if analysis_number == 255
value_GS(rows_value_GS) = [];
elseif analysis_number == 254
value_GS(rows_value_GS) = [];
else
value_GS(rows_value_GS) = value_GS(rows_value_GS);
end
end

5 Comments

How about using nan instead of []?
"How can I get the desired result?"
Numeric arrays cannot have empty elements or "holes" in them: every element is one value.
You could use a marker value, e.g. NaN, or store a separate logical mask.
Note however that uint8 cannot represent NaN or inf
What is the final purpose of making a bracket to those positions? For display only? Or you will write it as blank on a text file?
For display

Sign in to comment.

 Accepted Answer

load(websave("value_GS_test.mat", "https://www.mathworks.com/matlabcentral/answers/uploaded_files/1436593/value_GS_test.mat"));
value_GS = double(value_GS)
value_GS = 6×1
255 255 255 68 70 72
value_GS(value_GS>=254) = nan;
value_GS
value_GS = 6×1
NaN NaN NaN 68 70 72

7 Comments

Thank you for your reply. I prefer [] instead of '0' or 'NaN'.
If you prefer '[]', you may have to use string, which may not be efficient.
A string will most likely be complex and inefficient. Perhaps a mask would work... but it depends entirely on what they are doing with this data. So first the OP needs to answer this very important question:
Thank you for the clarification @Stephen23
Hi @Chunru. Is it normal that with your code I am displaying '0's instead of 'NaN'?
Yes, it is.
Refer to @Walter Roberson's comment above - "Note however that uint8 cannot represent NaN or inf".
When you try to assign NaN (or Inf for that matter) to a uint8 (or any integer data type) array, it will display 0 instead of NaN
%Signed integer data type example -
y = int16(1:4)
y = 1×4
1 2 3 4
%Assinging 2nd element of the vector to be NaN
y(2) = NaN
y = 1×4
1 0 3 4
%Unsigned integer data type example -
%Initializing NaN with an unsigned integer leads to 0 as well
z = uint8([1 23 NaN 19 5])
z = 1×5
1 23 0 19 5
Okay. Thanks for the explanation @Dyuman Joshi. I am unfamiliar with Matlab.

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2021b

Asked:

on 18 Jul 2023

Commented:

on 18 Jul 2023

Community Treasure Hunt

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

Start Hunting!