Hybrid Matrix (strings, double elements)

7 次查看(过去 30 天)
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'.

采纳的回答

Steven Lord
Steven Lord 2020-7-17
编辑:Steven Lord 2020-7-17
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", :}

更多回答(1 个)

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

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by