How to repeat value in Cell using MATLAB

38 Ansichten (letzte 30 Tage)
Stephen john
Stephen john am 27 Jun. 2022
Bearbeitet: dpb am 28 Jun. 2022
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

Akzeptierte Antwort

dpb
dpb am 27 Jun. 2022
Bearbeitet: dpb am 27 Jun. 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 Kommentare
Stephen john
Stephen john am 28 Jun. 2022
@dpb each cell is saving row wise , How can i save it in column wise
dpb
dpb am 28 Jun. 2022
Bearbeitet: dpb am 28 Jun. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Johan
Johan am 27 Jun. 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}
Value = 1×3 cell array
{[1]} {[2]} {[3]}
Count = {2,1,5}
Count = 1×3 cell array
{[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 = 1×3 cell array
{[1 1]} {[2]} {[3 3 3 3 3]}
Final = cellfun(@(x,y) x+cumsum(ones(y,1))-1,Value,Count,'UniformOutput',0);
Final{1}, Final{2}, Final{3}
ans = 2×1
1 2
ans = 2
ans = 5×1
3 4 5 6 7
best,
Johan
  4 Kommentare
Stephen john
Stephen john am 28 Jun. 2022
@Johan Pelloux-Prayer Getting Error using repmat
Replication factors must be a row vector of integers or integer scalars.
Error in @(x,y)repmat(x,1,y)
Stephen john
Stephen john am 28 Jun. 2022
@Johan Pelloux-Prayer The Output Should be cell in which each cell has numeric array , Not cell present in cell.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by