Error when using logical indexing to get a value from a table

22 views (last 30 days)
I have the following snippet of code, which I created based on online tutorial:
theta = pi/4
%Create the table
Angles = {pi/2;pi/3;pi/4;pi/6;pi/12};
wValues = {0;0.8846;1.318;1.973;3.782};
%Create a table of w values at specific angles
T = table(Angles,wValues);
%Read the value of w from the table
logical_index = T.Angles == theta;
w = T.wValues(logical_index);
I keep getting the following error on the line:
logical_index = T.Angles == theta;
Operator '==' is not supported for operands of type 'cell'.
I don't understand why this is happening since I am following a code example.

Accepted Answer

Stephen23
Stephen23 ungefär 4 timmar ago
Edited: Stephen23 ungefär 2 timmar ago
"Operator '==' is not supported for operands of type 'cell'."
Why are you using a cell array to store scalar numeric data?
"I don't understand why this is happening since I am following a code example."
Cell arrays are not defined for logical operations like EQ. Use numeric vectors instead:
theta = pi/3;
Angles = [pi/2;pi/3;pi/4;pi/6;pi/12]; % numeric vector, NOT a cell array!
wValues = [0;0.8846;1.318;1.973;3.782]; % numeric vector, NOT a cell array!
T = table(Angles,wValues);
logical_index = T.Angles == theta;
w = T.wValues(logical_index)
w = 0.8846
  1 Comment
Robert Demyanovich
Robert Demyanovich ungefär 2 timmar ago
Thank you. This works. I am new to MatLab and didn't realize that using curly brackets instead of regular brackets would result in a "cell array" (I don't even know what that is). As I said, I followed a code example which used curly brackets and didn't get the error.

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson ungefär 3 timmar ago
Examine the table that gets created:
%Create the table
Angles = {pi/2;pi/3;pi/4;pi/6;pi/12};
wValues = {0;0.8846;1.318;1.973;3.782};
%Create a table of w values at specific angles
T = table(Angles,wValues)
T = 5×2 table
Angles wValues __________ __________ {[1.5708]} {[ 0]} {[1.0472]} {[0.8846]} {[0.7854]} {[1.3180]} {[0.5236]} {[1.9730]} {[0.2618]} {[3.7820]}
Notice that it is a 5 x 2 table, with the entries being cell arrays. Those cell array entries cannot be compared to numeric values.
There is a connection between cell arrays and tables, but it has to do with appending data to tables.
T1 = table((1:5).', (101:105).')
T1 = 5×2 table
Var1 Var2 ____ ____ 1 101 2 102 3 103 4 104 5 105
data_to_add = [Angles,wValues]
data_to_add = 5×2 cell array
{[1.5708]} {[ 0]} {[1.0472]} {[0.8846]} {[0.7854]} {[1.3180]} {[0.5236]} {[1.9730]} {[0.2618]} {[3.7820]}
T1(end+1:end+5,:) = data_to_add
T1 = 10×2 table
Var1 Var2 ______ ______ 1 101 2 102 3 103 4 104 5 105 1.5708 0 1.0472 0.8846 0.7854 1.318 0.5236 1.973 0.2618 3.782
So, an existing table can be extended by assigning a cell array.
Or you can
T2 = cell2table(data_to_add)
T2 = 5×2 table
data_to_add1 data_to_add2 ____________ ____________ 1.5708 0 1.0472 0.8846 0.7854 1.318 0.5236 1.973 0.2618 3.782
  1 Comment
Robert Demyanovich
Robert Demyanovich ungefär 2 timmar ago
When I look at Table "T" in the workspace I do not see any brackets whatsoever around the data. To me it looked like a typical table with data values.

Sign in to comment.

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!