Cell contents assignment to a non-cell array object
1 次查看(过去 30 天)
显示 更早的评论
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
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
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.
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
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) = ...
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!