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';
답변 (3개)
Andrei Bobrov
2017년 3월 3일
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
Jan
2017년 3월 3일
+1: I'd prefer this and guess, it is the fastest solution.
Walter Roberson
2017년 3월 3일
This assumes that index(1) is 1.
It is an interesting approach, though.
Walter Roberson
2017년 3월 3일
A(index(1):index(end)) = repelem( value, [index(2)-index(1)+1,diff(index(2:end))]);
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
Walter Roberson
2017년 3월 3일
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))]
@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
카테고리
도움말 센터 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!