MATLAB Answers

Info

This question is closed. Reopen it to edit or answer.

How to build a matrix like this

4 views (last 30 days)
Rui Zhu
Rui Zhu on 18 Aug 2017
Closed: MATLAB Answer Bot on 20 Aug 2021 at 17:58
if we have a number n, we want a matrix like this:
So one simple example is:
What is the best way to build this?

Answers (4)

Stephen
Stephen on 18 Aug 2017
Edited: Stephen on 18 Aug 2017
>> N = 4;
>> V = N:-1:1;
>> bsxfun(@min,V,repmat(V(:),1,N))
ans =
4 3 2 1
3 3 2 1
2 2 2 1
1 1 1 1

José-Luis
José-Luis on 18 Aug 2017
n = 4;
result = repmat((n:-1:1),n,1) - tril(cumsum(tril(ones(n)))-1)

Kuifeng
Kuifeng on 18 Aug 2017
The following works, not the 'best' way...
n = 5;
A = [n:-1:1]';
for i = 2:n
A(:,i) = A(:,i-1);
A([1:i],i) = n-(i-1);
end
  3 Comments
Kuifeng
Kuifeng on 18 Aug 2017
Thank you Jose-Luis and Stephen, I noticed this red wave below for some time already, but didnt know why. You cleared my doubt. Good to learn.

Robert U
Robert U on 18 Aug 2017
Edited: Robert U on 18 Aug 2017
Hi Rui Zhu,
another possibility:
function [ A ] = SpecMatrice( n )
tic
A = zeros(n);
for ik = 1:n
A(1:ik,1:ik) = A(1:ik,1:ik) + 1;
end
t = toc;
sprintf('MySolution took %.2f µs',t*1e6)
end
On my PC that solution is for low values of n faster than the presented above. Here values for n=4:
Solution 1 took 806.82 µs
Solution 2 took 888.93 µs
Solution 3 took 441.34 µs
MySolution took 109.33 µs
For high values of n solution 2 & 3 gain speed a lot while solution 1 and MySolution get slowlier due to looping.
Kind regards,
Robert

Community Treasure Hunt

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

Start Hunting!

Translated by