Cell contents assignment to a non-cell array object

조회 수: 1 (최근 30일)
JA
JA 2016년 7월 27일
댓글: Guillaume 2016년 7월 27일
I am getting the above mentioned error while going through multiple loops. I really don't know how to explain the problem, But i will try my best
code:
function this = tempaddfilt(this,varargin)
fc = linspace(1,200,(200/0.5));
main = struct('seg_err',{},'sig_err',{},'filt_err',{},'fc',{});
for a = 1:length(fc) % fc
q = 0;
w = 0
for i = 1:length(this.segments) % total number signal
for k = 1:length(this.segments{i}) % total number of segments
filt_sig = eval(this.segments{i}(k).signal,this.segments{i}(k).signal(1)); % apply filter to the ith singal and kth segemnt
filt_sig = filt_sig';
main{i}(k).seg_err(a) = std(filt_sig-this.segments{i}(k).ref); % calculate the standard divitation of the filtered signal and previously calculated signal.
q = q+main{i}(k).seg_err(a); add all the error of the segments for the same FC
end
main{i}(1).sig_err(a) = q; % assign the sum of all error of the all segemnts of the same signal
w = w+main{i}(1).sig_err(a); % add all the error of the signals
end
main.filt_err = w; % assign the sum of all error of the all signals
end
this.error_norm = [this.error_norm ;main];
end
end
Basically I have 3 loops, 1st loop is for fc, 2nd loop is for signal and 3rd loop is for segemnts of the singal. Program works fine when fc = 1.
But when fc is 2, i get the following error:
Cell contents assignment to a non-cell array object.
in the line:
main{i}(k).seg_err(a) = std(filt_sig-this.segments{i}(k).ref);
that is when i =1 , k=1 ,a = 2
any help will be appriciated
  댓글 수: 1
Guillaume
Guillaume 2016년 7월 27일
Note: other than confusion between cells and structures that others have answered to, there is a very suspicious line in your code:
filt_sig = eval(something, somethingelse)
Using eval is extremely discouraged. Furthermore, eval only takes one argument and will simply ignore the second.

댓글을 달려면 로그인하십시오.

답변 (2개)

Image Analyst
Image Analyst 2016년 7월 27일
You declared main as a struct. Structs do not use braces {}. To fix, convert braces to parentheses (). Or else declare main as a cell array with the cell function rather than the struct function.
  댓글 수: 1
JA
JA 2016년 7월 27일
I cannot convert braces to paranthesis, It says
Cannot call or index into temporay array
Can you please elaborate on declaring main as a cell array with cell functions

댓글을 달려면 로그인하십시오.


Adam
Adam 2016년 7월 27일
main is declared as a struct so yes, you would get that error if you are trying to assign to it as though it is a cell array which is what
main{i}
will do. I assume what you want is an array of structs which does not need to be a cell array if the structs all have the same fields.
  댓글 수: 4
Stephen23
Stephen23 2016년 7월 27일
Which is why it would be much much simpler to use a non-scalar structure instead, which would avoid all of that confusion:
main(i,k).seg_err(a) = ...
JA
JA 2016년 7월 27일
Ah! non scalar structure seems to be easier solution, can you please tell me how do i start off with this, like declaration?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by