How to repeat value in Cell using MATLAB
    26 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello Everyone, I hope you are doing well
I have two cell array one is Value and other is Counts. Each Value in cell has specific count,
I want to repeat the element using count. 
for example Value=1 its Counts=15 Then the values repeat 15 times , now the  new cell has 15 Values for each [1,2,3,4]  and it applied on ALL cells.
How can i do that in Matlab
0 Commenti
Risposta accettata
  dpb
      
      
 il 27 Giu 2022
        
      Modificato: dpb
      
      
 il 27 Giu 2022
  
      fnRM=@(v,c)repmat(v,1,c);
for i=1:numel(Value)
  C{i}=cell2mat(arrayfun(fnRM,Value{i},Counts{i},'UniformOutput',false).');
end
works if you replace the NaN in the Counts arrays with 0; you can't use a NaN in repmat.
You'll just have to define what is intended with the NaN Value elements -- are any NaN to show up in output or not.
ix=isfinite(Counts{i});
C{i}=cell2mat(arrayfun(fnRM,Value{i}(ix),Counts{i}(ix),'UniformOutput',false).');
inside the loop works to ignore the NaN entries as well without changing the data arrays.
4 Commenti
  dpb
      
      
 il 28 Giu 2022
				
      Modificato: dpb
      
      
 il 28 Giu 2022
  
			Well, your original input cell arrays are row vectors...just transpose the output from cell2mat, of course...
>> for i=1:numel(Value),ix=isfinite(Counts{i});C{i}=cell2mat(arrayfun(fnRM,Value{i}(ix),Counts{i}(ix),'UniformOutput',false).').';end
>> C
C =
  1×6 cell array
    {60×1 double}    {86×1 double}    {98×1 double}    {15×1 double}    {12×1 double}    {12×1 double}
>> 
It's more bother to catenate vertically initially because they aren't all the same length.
Più risposte (1)
  Johan
      
 il 27 Giu 2022
        Hello, I don't know if there is a builtin matlab function to do what you want, this should work:
Value = {1,2,3}
Count = {2,1,5}
%Not sure if you want to repeat the same value or count from the value up
%to count
Final = cellfun(@(x,y) repmat(x,1,y),Value,Count,'UniformOutput',0)
Final = cellfun(@(x,y) x+cumsum(ones(y,1))-1,Value,Count,'UniformOutput',0);
Final{1}, Final{2}, Final{3}
best,
Johan
4 Commenti
Vedere anche
Categorie
				Scopri di più su Logical 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!


