Editing cell array values (each cell is a matrix)

5 vues (au cours des 30 derniers jours)
Ahsan  Khan
Ahsan  Khan le 10 Mai 2018
Commenté : Ameer Hamza le 12 Mai 2018
M=[];
M=dlmread('data.txt', '\t');
dataArray=M;
C= corrcoef(M(:,1:end));
imagesc(C);
cb = colorbar;
ylabel(cb, 'Correlation Coefficient');
moo=sqrt(C^.2)
moos=[]
for l=0:.1:1;
moo(moo<l)=0;
moos{end+1} = moo;
moos(moos>0)=1;
The last opertaion fails since > is an undefined operator for input arguments like cell. I unsuccessfully tried to make a function for the last line and implement it in cellfun. What would be the proper syntax here?
  2 commentaires
Stephen23
Stephen23 le 11 Mai 2018
Modifié(e) : Stephen23 le 11 Mai 2018
@Ahsan Khan: what is your question?
Ahsan  Khan
Ahsan  Khan le 11 Mai 2018
Modifié(e) : Ahsan  Khan le 11 Mai 2018
Well I figured out what I needed but now I'm trying to work out my next step, updated the question

Connectez-vous pour commenter.

Réponse acceptée

Ameer Hamza
Ameer Hamza le 12 Mai 2018
"The last operation fails since > is an undefined operator for input arguments like the cell."
You cannot directly perform the comparison on cell array. you need to access its element using curly brackets and then operate on them. For example, the following syntax will work
moos{end}(moos{end}>0) = 1;
to apply this operation to all elements of moos use cellfun as following
moos = cellfun(@(x) x.*(x<0)+(x>0)*1, moos, 'UniformOutput', 0)
  2 commentaires
Ahsan  Khan
Ahsan  Khan le 12 Mai 2018
I see, I saw the second format on another forum page, can you explain the @(x) x.*(x<0)+(x>0)*1 piece. For all entries if x<0 or x>0 set equal to 0?
Ameer Hamza
Ameer Hamza le 12 Mai 2018
x.*(x<0)+(x>0)*1 means that if entries are less than 0 than don't change them but if they are greater then 0, then make them 1. This is what I thought you are trying to do from your line
moos(moos>0)=1;

Connectez-vous pour commenter.

Plus de réponses (1)

possibility
possibility le 11 Mai 2018
before starting the iteration,
mos=[];
"before starting the removal of the next mo", most probably inside-end of the iteration,
mos{l*10}=mo;
  1 commentaire
Ahsan  Khan
Ahsan  Khan le 11 Mai 2018
Modifié(e) : Ahsan  Khan le 11 Mai 2018
This adds the entry only to the last space of mos{} All other entries are empty,
Update: Got it working with the following code.
moos=[]
...
for l=0:.1:1;
moo(moo<l)=0;
moos{end+1} = moo;
end;
...

Connectez-vous pour commenter.

Catégories

En savoir plus sur Scripts dans Help Center et File Exchange

Produits


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by