transforming a script for a matrix to a cell array

4 visualizzazioni (ultimi 30 giorni)
a = randi(50,600,9);
mx = randi(50,60,1);
mn = randi(50,60,1);
b = reshape(a(:,7),10,[]).';
q = bsxfun(@minus,b,mx);
%q = bsxfun(@rdivide,q,mx-mn);
%q = reshape(q.',[],1);
How can I apply this code which has been designed for a matrix table to a cell array?
Imagine the following
a = { rand(6000,7); rand(3600,7); rand(600,7); };
mx = {randi(50,600,1); randi(360,60,1); randi(50,60,1)}
mn = {randi(50,600,1); randi(360,60,1); randi(50,60,1)}
  12 Commenti
AA
AA il 2 Dic 2014
maybe something like this
q = a;
n=61
for f=1:n
for k = 1:numel(q)
b = reshape(a{k}(:,7),60,[]).';
b = bsxfun(@minus,b,mx{k,n});
b = bsxfun(@rdivide,b,mx{k,n}-mn{k,n});
q{1} = reshape(b.',[],1);
end
end
Stephen23
Stephen23 il 2 Dic 2014
Modificato: Stephen23 il 2 Dic 2014
Yes, basically you need to take the answer I gave, and wrap with another loop. I will reply to my original answer with some code that you could try.

Accedi per commentare.

Risposta accettata

Stephen23
Stephen23 il 2 Dic 2014
Modificato: Stephen23 il 2 Dic 2014
It seems that you want to apply a function to multiple numeric arrays contained in several cell arrays. There are essentially two ways to achieve this:
  • Use a loop over the length of the arrays.
  • Use cellfun .
Note that a loop can be achieved in a script, whereas cellfun would (most likely) require a function to be defined. cellfun can be a tidy solution, as it allows local code to show intent by defining a complicated function elsewhere. In any case, the following code will apply that function to those cell arrays, using loops:
a = {rand(6000,7); rand(3600,7); rand(600,7)};
mx = {randi(50,600,1); randi(50,360,1); randi(50,60,1)};
mn = {randi(50,600,1); randi(50,360,1); randi(50,60,1)};
q = a;
for k = 1:numel(q)
b = reshape(a{k}(:,7),10,[]).';
b = bsxfun(@minus,b,mx{k});
b = bsxfun(@rdivide,b,mx{k}-mn{k});
q{k} = reshape(b.',[],1);
end
Note that this code includes several corrections to what you supplied above, as the dimensions of randi(360,60,1) will lead to an error. I also uncommented the last two lines of the algorithm, as these are required to match the function that you gave in an earlier question.
  8 Commenti
AA
AA il 2 Dic 2014
great i didnt know that. thanks for your help. really appreciate it.
Stephen23
Stephen23 il 2 Dic 2014
Glad to be able to help. I hope you feel more comfortable with loops and arrays now :)

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by