Effacer les filtres
Effacer les filtres

adding data from one cell array to a matrix

1 vue (au cours des 30 derniers jours)
Joseph Lee
Joseph Lee le 29 Nov 2017
Modifié(e) : Joseph Lee le 30 Nov 2017
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 commentaires
Stephen23
Stephen23 le 29 Nov 2017
Do not use ans as the names of any variable. It is a special variable that can be overwritten by MATLAB.
Joseph Lee
Joseph Lee le 29 Nov 2017
It is ok, its not being used in the code itself, its in here just to predict the results in theory

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 29 Nov 2017
Modifié(e) : Stephen23 le 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 commentaires
Stephen23
Stephen23 le 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
>>
Joseph Lee
Joseph Lee le 29 Nov 2017
Modifié(e) : Joseph Lee le 30 Nov 2017
wow thanks again, you predicted what i was going to ask, since my M is meant to be a much larger sized matrix
eg M= 400x1300
H= 10x1300
row=1;
while row<=10
fun = @(m,h) [fliplr(h)+m,m,m+h];
tmp = H(ones(1,size(M,1)),:); <i changed this to do it for increasing rows of H
C{row}= cellfun(fun,num2cell(M),tmp, 'Uni',0);
row=row+1;
end

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Line Plots dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by