Is there a smarter way to create a large vector, with repeated numbers in a diminishing quantity?
Afficher commentaires plus anciens
I need the vector to begin with 144 evenly spaced '2's, then 143 '3's, then 142 '4's, etc. I see the brute force method, but it doesn't seem very smart. Is there a way to get Matlab to create this vector for me?
thx
2 commentaires
Igor
le 3 Juin 2011
Valid code --
n=14;A1=(1:n)'*ones(1,n);A2=triu(A1)';A3=reshape(A2,1,n^2);A=A3(A3~=0),
Sean de Wolski
le 3 Juin 2011
Any question that makes a golf challenge gets a vote from me!
Réponse acceptée
Plus de réponses (4)
Friedrich
le 3 Juin 2011
I think the repmat command can help:
[repmat(2,144,1);repmat(3,143,1);repmat(4,142,1)]
2 commentaires
Igor
le 3 Juin 2011
no :) 144 times?
n=144;
A1=(1:n)'*ones(1,n);
A2=tril(A1);
A3=reshape(A2...);
find... all zero elements
Friedrich
le 3 Juin 2011
Upps^^, than this way:
start_repeat = 144;
start_number = 2;
final_size = (start_repeat+1)*start_repeat / 2;
final_vec = zeros(final_size,1);
index = 1;
for i=start_repeat:-1:1
final_vec(index:index+i-1,1) = repmat(start_number+start_repeat-i,i,1);
index = index + i;
end
Igor
le 3 Juin 2011
0 votes
[1,2,2,3,3,3,4,4,4,4,...] similar task
n=1:10 trinv(n) = floor((1+sqrt(1+8*n))/2)
(<http://oeis.org/A002024>)
Oleg Komarov
le 3 Juin 2011
n = 144;
val = 1:n;
len = val;
Out = rude(len,val); % rude on fex
Andrei Bobrov
le 3 Juin 2011
n = 144;
vm = triu(repmat(n+1:-1:1,n+1,1));
vm(vm>0);
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!