How to add two values to a matrix each five values of that matrix in order to have a new matrix?

조회 수: 1 (최근 30일)
Hello everyone,
I have one matrix "A" with dimension 358x1 and I am trying to form a new matrix "B" with dimension 520x1. I need to form the matrix "B" using with the values of "A" where every five values I would like the fifth to be duplicated and attached to itself two times.
More easily, supposing a matrix "XY" with dimension 15x1, I would like to duplicate the rows 5, 10 and 15 two times and then attach that values to themselves. At the end, I should have a new matrix "XYZ" with dimension 21x1. Practically:
XY = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15]
XYZ = [1; 2; 3; 4; 5; 5; 5; 6; 7; 8; 9; 10; 10; 10; 11; 12; 13; 14; 15; 15; 15]
Thank you in advance

채택된 답변

Jackson Burns
Jackson Burns 2019년 9월 14일
Hi Andrea!
Here's a function I wrote to achieve the goal:
function out = dup5(inputmatrix)
h=size(inputmatrix,1);
count = 1; out = zeros(h+floor(h/5)*2,1);
for i = 1:size(inputmatrix,1)
if mod(i,5)==0
out(count:count+2) = [inputmatrix(i); inputmatrix(i); inputmatrix(i)];
count = count + 3;
else
out(count) = inputmatrix(i);
count = count + 1;
end
end

추가 답변 (2개)

Bruno Luong
Bruno Luong 2019년 9월 14일
편집: Bruno Luong 2019년 9월 14일
XY = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15]:
r = ones(size(XY));
r(5:5:end) = 3;
XYZ = repelem(XY,r)
Note if you expand (358 x 1) array you'll get (500 x 1) array.

madhan ravi
madhan ravi 2019년 9월 14일
ix=arrayfun(@(x)[x,x*(ones(~mod(x,5),2))],1:numel(XY),'un',0);
% multiple of 5----^ ^-- n times
idx=cat(2,ix{:});
XYZ = XY(idx,:)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by