Replace some values of a vector with another vector which has a different size

4 ビュー (過去 30 日間)
Christina
Christina 2015 年 4 月 29 日
コメント済み: Stephen23 2015 年 4 月 29 日
Hello
I've got the vector: source = [ 0 0 1 0 1]
and the vector a = [2 3],
which has a different size to source.
I'd like to replace in the source vector the elements that are equal to 1, with those of vector a.
The final vector b should be: b = [0 0 2 0 3]
Any thoughts on this?
Thank you!

採用された回答

Thorsten
Thorsten 2015 年 4 月 29 日
編集済み: Thorsten 2015 年 4 月 29 日
source(source == 1) = a
  2 件のコメント
Christina
Christina 2015 年 4 月 29 日
Thank you! It works!
pfb
pfb 2015 年 4 月 29 日
However, that changes "source" instead of creating "b", as asked in the question.

サインインしてコメントする。

その他の回答 (2 件)

pfb
pfb 2015 年 4 月 29 日
b=zeros(size(source));
b(find(source))=a;
of course this works only if the number of nonzero elements in source are the same as the elements in a.

Stephen23
Stephen23 2015 年 4 月 29 日
編集済み: Stephen23 2015 年 4 月 29 日
This can be achieved very simply using basic logical indexing:
>> A = [ 0 0 1 0 1];
>> B = [ 2 3];
>> A(A==1) = B
A = 0 0 2 0 3
On my computer this was almost twice as fast compared to using find and zeros.
  3 件のコメント
James Tursa
James Tursa 2015 年 4 月 29 日
Stephen switched nomenclature. His starting "A" is your "source" his "B" is your "a", and his resulting "A" is your "b".
Stephen23
Stephen23 2015 年 4 月 29 日
Guilty as charged.

サインインしてコメントする。

Community Treasure Hunt

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

Start Hunting!

Translated by