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

19 visualizaciones (últimos 30 días)
Robert Demyanovich
Robert Demyanovich hace alrededor de 13 horas
Editada: Stephen23 hace alrededor de 11 horas
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.

Respuesta aceptada

Stephen23
Stephen23 hace alrededor de 3 horas
Editada: Stephen23 hace alrededor de 1 hora
"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 comentario
Robert Demyanovich
Robert Demyanovich hace alrededor de 1 hora
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.

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson hace alrededor de 2 horas
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 comentario
Robert Demyanovich
Robert Demyanovich hace alrededor de 1 hora
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.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by