MATLAB: Cell contents reference from a non-cell array object.

enter mathworks products that apply to this questionnon-cell array object

clc;
clear all;
vchave = [2 2 2 2 2 2]
for k = 1:6;
v{k} = vchave
v{1,k} = v{1,k}-1
v{1}{k+1} = v{1}{k+1}-1
end
I am getting error "Cell contents reference from a non-cell array object" . Please tell me how to solve this problem.

Best Answer

  • Each cell of v contains a numeric vector. So your indexing here:
    v{1}{k+1} = v{1}{k+1}-1
    % ^ ^ ^ ^ wrong type of bracekts for numeric array.
    uses the wrtong type of brackets for indexing (curly braces are used to access the elements of a container array, e.g. the elements of a cell array, table, or string). The correct brackets for accessing the elements of a numeric array are parentheses, as shown here:
    vchave = [2,2,2,2,2,2];
    for k = 1:5;
    v{k} = vchave
    v{1,k} = v{1,k}-1
    v{1}(k+1) = v{1}(k+1)-1
    end
    v = 1x1 cell array
    {1×6 double}
    v = 1x1 cell array
    {1×6 double}
    v = 1x1 cell array
    {1×6 double}
    v = 1x2 cell array
    {1×6 double} {1×6 double}
    v = 1x2 cell array
    {1×6 double} {1×6 double}
    v = 1x2 cell array
    {1×6 double} {1×6 double}
    v = 1x3 cell array
    {1×6 double} {1×6 double} {1×6 double}
    v = 1x3 cell array
    {1×6 double} {1×6 double} {1×6 double}
    v = 1x3 cell array
    {1×6 double} {1×6 double} {1×6 double}
    v = 1x4 cell array
    {1×6 double} {1×6 double} {1×6 double} {1×6 double}
    v = 1x4 cell array
    {1×6 double} {1×6 double} {1×6 double} {1×6 double}
    v = 1x4 cell array
    {1×6 double} {1×6 double} {1×6 double} {1×6 double}
    v = 1x5 cell array
    {1×6 double} {1×6 double} {1×6 double} {1×6 double} {1×6 double}
    v = 1x5 cell array
    {1×6 double} {1×6 double} {1×6 double} {1×6 double} {1×6 double}
    v = 1x5 cell array
    {1×6 double} {1×6 double} {1×6 double} {1×6 double} {1×6 double}
    I strongly recommend preallocating v before the loop.