adding data from one cell array to a matrix
1 view (last 30 days)
Show older comments
M is a 2x4matrix
H is a 3x4cell array
How do i add the 1st row of H to every row of M?
M = [
1 2 3 4
5 6 7 8
];
H = {[15 35] [10 20] [30 40 10] [15]
[30 20 15] [45 55] [50 70] [30 70]
[25] [10 20 30] [25 35] [60 70]};
fun = @(m,h) [fliplr(h)+m,m,m+h];
ans=cellfun(fun,num2cell(M), *H{1,:}*,'Uni',0); < what do i put H as?
ans={[36 16 1 16 36] [20 12 2 12 22] [13 43 33 3 33 43 13] [19 4 19]
[40 20 5 20 40] [26 16 6 16 26] [17 47 37 7 37 47 17] [23 8 23]}
2 Comments
Stephen23
on 29 Nov 2017
Do not use ans as the names of any variable. It is a special variable that can be overwritten by MATLAB.
Accepted Answer
Stephen23
on 29 Nov 2017
Edited: Stephen23
on 29 Nov 2017
If M has two rows then
H([1,1],:)
In general
H(ones(1,size(M,1)),:)
or
repmat(H(1,:),size(M,1),1)
3 Comments
Stephen23
on 29 Nov 2017
Demonstration:
M = [1,2,3,4;5,6,7,8];
H = {[15,35],[10,20],[30,40,10],[15];[30,20,15],[45,55],[50,70],[30,70];[25],[10,20,30],[25,35],[60,70]};
fun = @(m,h) [fliplr(h)+m,m,m+h];
tmp = H(ones(1,size(M,1)),:);
C = cellfun(fun,num2cell(M),tmp, 'Uni',0);
Giving:
>> C{:}
ans =
36 16 1 16 36
ans =
40 20 5 20 40
ans =
22 12 2 12 22
ans =
26 16 6 16 26
ans =
13 43 33 3 33 43 13
ans =
17 47 37 7 37 47 17
ans =
19 4 19
ans =
23 8 23
>>
More Answers (0)
See Also
Categories
Find more on Data Type Identification 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!