## how to full fill the diagonal of a matrix by a vector

### Kamel (view profile)

on 8 May 2019
Latest activity Answered by Matt J

### Matt J (view profile)

on 10 May 2019

hello
how can i full fill a matrix (17*9) by a vector by length 9
for example i have the vector d=[1 2 3 ] and the matrix zeros(5*5) and i want to make the output matrix like this
1 0 0 3 2
2 1 0 0 3
3 2 1 0 0
0 3 2 1 0
0 0 3 2 1
thanks

### Tags

on 8 May 2019

This approach uses circshift() to circularly shift the columns of matrix.
m = zeros(5,5);
v = [1,2,3];
% Loop through each column of m
for i = 1:size(m,2)
m(1:length(v),i) = v;
m(:,i) = circshift(m(:,1), i-1);
end
Result:
m =
1 0 0 3 2
2 1 0 0 3
3 2 1 0 0
0 3 2 1 0
0 0 3 2 1

Kamel

### Kamel (view profile)

on 8 May 2019
thank you very much

on 10 May 2019

### Geoff Hayes (view profile)

on 8 May 2019

Ahmed - try using
a = [1 2 3 0 0]';
A = cell2mat(arrayfun(@(x)circshift(a,x-1),1:length(a), 'UniformOutput', false));
We use arrayfun and circshift to apply an anonymous function that shifts the a down by one element (less one) for each of the five columns in your output matrix. We use cell2mat to conver the cell array output to a matrix.

on 8 May 2019
Nice! Simultaneous solutions with the same approach!
Kamel

on 8 May 2019
ok, thank you

on 10 May 2019
Edited by Jan

### Jan (view profile)

on 10 May 2019

m = zeros(5,5);
v = [1,2,3,4];
n = numel(v);
index = 1:n;
for i = 1:size(m,2)
m(mod(i-1:i+n-2, 5)+1, i) = v;
end

### Matt J (view profile)

on 10 May 2019

>> full(interpMatrix([1,2,3],1,5,1,'circ'))
ans =
1 0 0 3 2
2 1 0 0 3
3 2 1 0 0
0 3 2 1 0
0 0 3 2 1