Replace an element of a vector by also redefining the vector

8 ビュー (過去 30 日間)
Konstantinos Tsitsilonis
Konstantinos Tsitsilonis 2017 年 8 月 3 日
回答済み: Julie Kraus 2017 年 8 月 3 日
Hi all,
I would like to replace some elements of a vector Vec that have indices idx with NaN, to create a new vector VecNaN. However, using the usual code below
Vec(idx) = NaN;
redefines the vector Vec with the NaN elements. Instead I want to find a new vector VecNaN such that it is the same as Vec, but with the NaN elements in the indices idx.
Thanks for your help in advance,
KMT.

採用された回答

Harry Vancao
Harry Vancao 2017 年 8 月 3 日
You could do the following:
vecNaN = vec; vecNaN(idx) = NaN;
  1 件のコメント
Jan
Jan 2017 年 8 月 3 日
編集済み: Jan 2017 年 8 月 3 日
+1. This is usually the most efficient solution. You could save the copy of the overwritten elements also, which is easier, when idx is a logical index vector:
x = rand(1, 1000);
idx = (x > 0.9);
y(idx) = NaN;
y(~idx) = x(~idx);
This creates the vector y twice if the last element is not NaN. Better:
if idx(end)
y(idx) = NaN;
y(~idx) = x(~idx);
else
y(~idx) = x(~idx);
y(idx) = NaN;
end
Well, in most cases it is not worth the effort and Harry's suggestion is nice and efficient, although it "wastes" some time with copying elements, which are overwritten directly.

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

その他の回答 (1 件)

Julie Kraus
Julie Kraus 2017 年 8 月 3 日
If I am understanding you correctly you want 2 vectors out, your original and a new vector with NaN's in idx locations.
VecNaN=Vec;
VecNaN(idx)=NaN;

カテゴリ

Help Center および File ExchangeCreating, Deleting, and Querying Graphics Objects についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by