Clear Filters
Clear Filters

Hybrid Matrix (strings, double elements)

7 views (last 30 days)
I have a string-column-vector A and I have three set of data (three string-column-vectors B, C, D) associate to every element of A.
If I put these together to form a compact matrix (We call X), I cannot do operations between elements of B, C, D.
For example if I wanna do a difference between B and C, this is the error:
Undefined operator '-' for input arguments of type 'string'.
This is because my matrix is a string matrix. How can I make operations betweens the numeric values of matrix X?
A = ["wine"; "beer"; "water"; "The"];
B = [1 3 0.5 0.3];
C = [9 26 0.7 900];
D = [0 565 0 0.3];
% I create a compact matrix
X = [A B C D];
% Now I want to make a difference between B and C, but taking the element FROM MATRI X
diff = X(:,2) - X(:,3);
%But this is the error:
Undefined operator '-' for input arguments of type 'string'.

Accepted Answer

Steven Lord
Steven Lord on 17 Jul 2020
Edited: Steven Lord on 17 Jul 2020
Your concatenation operation (X = [A B C D];) converts the double arrays into string arrays. Instead what you probably want is a table array. I'm going to make one slight modification to your data (transposing B, C, and D.) I'm going to show you two different table arrays, one where A contains data and one where A contains "labels" for the rows of your data.
A = ["wine"; "beer"; "water"; "The"];
B = [1 3 0.5 0.3].';
C = [9 26 0.7 900].';
D = [0 565 0 0.3].';
T_data = table(A, B, C, D)
CminusB = T_data.C - T_data.B
T_label = table(B, C, D, 'RowNames', A)
CminusB2 = T_label.C - T_data.B
beerD = T_label("beer", "D")
waterAll = T_label{"water", :}

More Answers (1)

madhan ravi
madhan ravi on 17 Jul 2020
DifF = double(X(:,2)) - double(X(:,3)); % never name a variable diff!!

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!