Borrar filtros
Borrar filtros

Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

how to combain matrix with vector

1 visualización (últimos 30 días)
nadav regev
nadav regev el 12 de Dic. de 2017
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
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 comentario
Birdman
Birdman el 12 de Dic. de 2017
What have you done so far?

Respuestas (3)

KL
KL el 12 de Dic. de 2017
Editada: KL el 12 de Dic. de 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 comentarios
KL
KL el 12 de Dic. de 2017
Editada: KL el 12 de Dic. de 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
Steven Lord el 12 de Dic. de 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
Andrei Bobrov el 12 de Dic. de 2017
Editada: Andrei Bobrov el 12 de Dic. de 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 comentario
Birdman
Birdman el 12 de Dic. de 2017
Please do not provide direct solutions before seeing any effort from the user.

Jan
Jan el 12 de Dic. de 2017
Editada: Jan el 12 de Dic. de 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)

La pregunta está cerrada.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by