insert matrix index to specific number

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';

Antworten (3)

Andrei Bobrov
Andrei Bobrov am 3 Mär. 2017

1 Stimme

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

Jan
Jan am 3 Mär. 2017
+1: I'd prefer this and guess, it is the fastest solution.
Walter Roberson
Walter Roberson am 3 Mär. 2017
This assumes that index(1) is 1.
It is an interesting approach, though.

Melden Sie sich an, um zu kommentieren.

Walter Roberson
Walter Roberson am 3 Mär. 2017

0 Stimmen

A(index(1):index(end)) = repelem( value, [index(2)-index(1)+1,diff(index(2:end))]);
Stephen23
Stephen23 am 3 Mär. 2017
Bearbeitet: Stephen23 am 3 Mär. 2017

0 Stimmen

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
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
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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrices and Arrays finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 3 Mär. 2017

Bearbeitet:

am 3 Mär. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by