i want to replace cell data to index.
Show older comments
Hello,
I'm poor at English so write simple code..
cell data is a = {[1 2 3 4 ] [5 6] [ 7 8 9]} ; index = [2 1 3] ; -> 10 11 12
the result is a = {[1 10 3 4] [ 11 6] [7 8 12 ]}
cell data size are different.
i want to replace the cell data at the same time. How can i replace the data without using for loop. i don't know how to use cellfun function or another method.
for example,
at matrix a = [1 2 3 4 5] ; a([1 3]) = [100 200 ] ; the result is a=[100 2 200 4 5] ;
i want like this at cell.
thanks.
2 Comments
Jos (10584)
on 20 Jan 2014
Do you want to replace a value or insert it?
Seongjin
on 21 Jan 2014
Accepted Answer
More Answers (3)
Jos (10584)
on 20 Jan 2014
To insert values at a location in a cell of A:
A = {[1 2 3 4 ] [5 6] [ 7 8 9]} ;
index = [2 1 3] ;
B = [10 11 12] ;
fh = @(k) insertrows(A{k}.', B(k), index(k)-0.5).' ; % offset of 0.5 to insert _before_
OUT = arrayfun(fh,1:3,'un',false)
INSERTROWS can be found here:
http://www.mathworks.com/matlabcentral/fileexchange/9984-insertrows-v2-0-may-2008
1 Comment
Andrei Bobrov
on 20 Jan 2014
a = {[1 2 3 4 ] [5 6] [ 7 8 9]} ;
index = [2 1 3] ;
b = [10 11 12];
n = cellfun(@numel,a);
v = [a{:}];
ii = index +[0 cumsum(n(1:end-1))];
v(ii)=b;
out = mat2cell(v,1,n);
Jos (10584)
on 22 Jan 2014
Edited: Jos (10584)
on 23 Jan 2014
To replace values at a location in a cell of A:
Step 1: Create a function like this
function X = MyReplace(X,ii,V)
% MyReplace(X,ii,V) replaces X(ii) with V
X(ii) = V ;
Step 2: Use it like this:
% Example data
A = {[1 2 3 4 ] [5 6] [ 7 8 9]} ;
index = [2 1 3] ;
B = [10 11 12] ;
% Engine
fh = @(k) MyReplace(A{k},index(k),B(k)) ;
OUT = arrayfun(fh,1:3,'un',false)
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!