MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by AP on 16 Jun 2011

I have defined an array of struct, named A. A is the profile by which the experiment is done. There are 4 profiles.

A has a member named B which is a cell array. B is of size N×1 where N is the number of experiments, approximately 5000. Elements of B are M×1 vectors. M varies with respect to the experiment.

For example, A(3).B{2} is for profile#3 and experiment#2.

I am trying update the values of B for each profile by subtracting 4 different constants from the elements of B. I tried the following but I get error.

cons(1)=1; cons(2)=2; cons(3)=3; cons(4)=4;

for i=1:4 A(i).B=arrayfun(@(x) (x-cons(i)),[A(i).B)]); end

I would appreciate your help. :)

*No products are associated with this question.*

Answer by Andrei Bobrov on 16 Jun 2011

V=squeeze(struct2cell(A)); V2 = arrayfun(@(x)cellfun(@(y)y-cons(x),V{x},'un',0) ,1:length(A),'un',0); A = struct('B',V2)

it variant without loop, but I think your variant better

## 2 Comments

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/9600#comment_20992

I figured it out by using:

A(i).B=cellfun(@(x) (x-cons(i)), A(i).B, 'uniformOutput',false);

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/9600#comment_20993

I would be thankful for suggesting a better solution, :)))))