Info

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

How to build a matrix like this

조회 수: 1 (최근 30일)
Rui Zhu
Rui Zhu 2017년 8월 18일
마감: MATLAB Answer Bot 2021년 8월 20일
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?

답변 (4개)

Stephen23
Stephen23 2017년 8월 18일
편집: Stephen23 2017년 8월 18일
>> 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 2017년 8월 18일
n = 4;
result = repmat((n:-1:1),n,1) - tril(cumsum(tril(ones(n)))-1)

Kuifeng
Kuifeng 2017년 8월 18일
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
Stephen23
Stephen23 2017년 8월 18일
편집: Stephen23 2017년 8월 18일
It is better to use parentheses around an already existing vector:
A = (n:-1:1)';
rather than using the concatenation operator. The editor has warning for this:
Kuifeng
Kuifeng 2017년 8월 18일
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 2017년 8월 18일
편집: Robert U 2017년 8월 18일
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