insert matrix index to specific number
11 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have zeros matrix A = zeros(1,10);
and I want insert specific number to index range.
ex) index = [1 6 10]; value = [4 6];
I want return the matrix ans = [4 4 4 4 4 4 6 6 6 6];
How can I return this answer not using 'for';
0 commentaires
Réponses (3)
Andrei Bobrov
le 3 Mar 2017
my small contribution
index = [1 6 10];
value = [4 6];
ii = zeros(index(end),1);
ii([1,index(2:end-1)+1]) = 1;
A = value(cumsum(ii));
2 commentaires
Walter Roberson
le 3 Mar 2017
This assumes that index(1) is 1.
It is an interesting approach, though.
Walter Roberson
le 3 Mar 2017
A(index(1):index(end)) = repelem( value, [index(2)-index(1)+1,diff(index(2:end))]);
0 commentaires
Stephen23
le 3 Mar 2017
Modifié(e) : Stephen23
le 3 Mar 2017
For MATLAB versions without repelem (pre R2015a):
>> index = [1 6 10]; value = [4 6];
>> cell2mat(arrayfun(@(d,v)repmat(v,1,d),diff(index),value,'Uni',0))
ans =
4 4 4 4 4 6 6 6 6
2 commentaires
Walter Roberson
le 3 Mar 2017
Notice though that you output five 4's when the desired output is six 4's. The pattern appears to be that the first index gives a starting position number, that the next gives the ending position number of the first value, that the next after that gives the ending position number of the second value, and so on. The number of repeats of the first item is special, which is why I ended up using [index(2)-index(1)+1,diff(index(2:end))]
Stephen23
le 3 Mar 2017
Modifié(e) : Stephen23
le 3 Mar 2017
@Walter Roberson: thank you for fixing that strange inconsistency in the index definition. Applying your fix:
>> index = [1 6 10]; value = [4 6];
>> idx = [index(2)-index(1)+1,diff(index(2:end))];
>> cell2mat(arrayfun(@(d,v)repmat(v,1,d),idx,value,'Uni',0))
ans =
4 4 4 4 4 4 6 6 6 6
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!