insert matrix index to specific number
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (3)
Andrei Bobrov
am 3 Mär. 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 Kommentare
Walter Roberson
am 3 Mär. 2017
This assumes that index(1) is 1.
It is an interesting approach, though.
Walter Roberson
am 3 Mär. 2017
A(index(1):index(end)) = repelem( value, [index(2)-index(1)+1,diff(index(2:end))]);
0 Kommentare
Stephen23
am 3 Mär. 2017
Bearbeitet: Stephen23
am 3 Mär. 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 Kommentare
Walter Roberson
am 3 Mär. 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
am 3 Mär. 2017
Bearbeitet: Stephen23
am 3 Mär. 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
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!