insert matrix index to specific number

2 Ansichten (letzte 30 Tage)
ByoungYong Ryu
ByoungYong Ryu am 3 Mär. 2017
Bearbeitet: Stephen23 am 3 Mär. 2017
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
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
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
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 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!

Translated by