Info
Questa domanda è chiusa. Riaprila per modificarla o per rispondere.
how to combain matrix with vector
    1 visualizzazione (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
if I have matrix a = [9 8 7; 6 5 4] and vector v = [1 2 3 4 5] I want to combaine matrix like this
[9 8 7 inf inf; ...
 6 5 4 inf inf; ...
 1 2 3 4 5]
thank you!!
1 Commento
Risposte (3)
  KL
      
 il 12 Dic 2017
        
      Modificato: KL
      
 il 12 Dic 2017
  
      Something like this?
a = [9 8 7; 6 5 4];
v = [1 2 3 4 5];
sz = size(a);
a = [a inf(sz(1),size(v,2)-sz(2));v]
4 Commenti
  KL
      
 il 12 Dic 2017
				
      Modificato: KL
      
 il 12 Dic 2017
  
			I agree with Jan.
@Birdman: Usually when you see a homework, doit4me tag (tagged by volunteers), you could choose not to answer or you could give them some hints rather than explicit answers.
For example the one on the below link was clearly a copy-paste of homework question, a typical doit4me.
  Steven Lord
    
      
 il 12 Dic 2017
				And if it sounds like it may be homework but you're not certain, you can gently nudge the poster into offering more information. I tend to use something like "If you show us what you've already tried we may be able to offer some suggestions for how to proceed." to do that nudging.
  Andrei Bobrov
      
      
 il 12 Dic 2017
        
      Modificato: Andrei Bobrov
      
      
 il 12 Dic 2017
  
      a = [9 8 7; 6 5 4];
v = [1 2 3 4 5];
z = {a;v};
[ii,jj] = cellfun(@size,z);
n = max(jj);
out = cell2mat(arrayfun(@(x,y,k)[z{x},inf(k,n - y)],(1:numel(z))',jj,ii,'un',0))
or
a = [9 8 7; 6 5 4];
v = [1 2 3 4 5];
z = {a;v};
m = numel(z);
[ii,jj] = cellfun(@size,z);
n = max(jj);
i2 = cumsum(ii);
i1 = i2 - ii + 1;
out = inf(sum(ii),n);
for ii = 1:m
    out(i1(ii):i2(ii),1:jj(ii)) = z{ii};
end
1 Commento
  Birdman
      
      
 il 12 Dic 2017
				Please do not provide direct solutions before seeing any effort from the user.
  Jan
      
      
 il 12 Dic 2017
        
      Modificato: Jan
      
      
 il 12 Dic 2017
  
      a = [9 8 7; 6 5 4];
v = [1 2 3 4 5];
out = padcat(a(1, :), a(2, :), v);
out(isnan(out)) = Inf;
Or write a function by your own:
% UNTESTED !!!
function Out = CatPadding(Dim, varargin)
In = varargin;
S1 = cellfun('size', In, 1);
S2 = cellfun('size', In, 2);
c = 1;
if Dim == 1
  Out = Inf(sum(S1), max(S2));
  for k = 1:numel(In)
    Out(c:c+S1(k)-1, 1:S2(k)) = In{k};
    c = c + S1(k);
  end
elseif Dim == 2
  Out = Inf(max(S1), sum(S2));
  for k = 1:numel(In)
    Out(1:S1(k), c:c+S2(k)-1) = In{k};
    c = c + S2(k);
  end
else
  error('Only Dim=1 and Dim=2 implemented yet.')
end
And:
a = [9 8 7; 6 5 4];
v = [1 2 3 4 5];
Out = CatPadding(1, a, v)
0 Commenti
Questa domanda è chiusa.
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





