Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

how to combain matrix with vector

조회 수: 1 (최근 30일)
nadav regev
nadav regev 2017년 12월 12일
마감: MATLAB Answer Bot 2021년 8월 20일
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
Birdman
Birdman 2017년 12월 12일
What have you done so far?

답변 (3개)

KL
KL 2017년 12월 12일
편집: KL 2017년 12월 12일
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
KL
KL 2017년 12월 12일
편집: KL 2017년 12월 12일
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 2017년 12월 12일
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 2017년 12월 12일
편집: Andrei Bobrov 2017년 12월 12일
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
Birdman
Birdman 2017년 12월 12일
Please do not provide direct solutions before seeing any effort from the user.

Jan
Jan 2017년 12월 12일
편집: Jan 2017년 12월 12일
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)

이 질문은 마감되었습니다.

Community Treasure Hunt

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

Start Hunting!

Translated by