double array of 0's and 1's conversion help

I have an array of 0's and 1's
Im trying to convert the 0's to nans and 1's to another value.
A(find(A==1)=256; %this part works
A(find(A==0)=NaN; %this part doesn't
when i try to replace the 0's, it replaces everything in the array with NaN, even though find(A==0) does return only the indices of where that array has a 0 value.
is there technical thing I'm missing here?

回答(2 个)

A(A==1) = 256;
A(A==0) = NaN;
If you want to live a life of confusion, and you only have 0 and 1s in the matrix,
A = A ./ A * 256;

4 个评论

Walter, I recognize that your syntax avoids the unnecessary find(), but what's the use case in which your syntax works, but David's doesn't? I'm puzzled.
He may have left the bracket off like in the question?
Reduces the steps that can go wrong ?
sorry, i just forgot to put the brackets in while typing, i have them in my actual code

请先登录,再进行评论。

just tried
A(A==1) = 256;
A(A==0) = NaN;
and the same thing happened. The A==1 part worked, but as soon as it tried to logical index the ones that were 0, it replaced everything with NaN

2 个评论

What happens if you run this:
A = double(rand(10)>0.5);
A(A==1) = 256;
A(A==0) = NaN;
A
Try breaking it down and do some experiments to see which step is going wrong:
A
T = A == 0
B = A;
A(T) = NaN
B(1) = NaN
C = rand(size(A));
C(T) = NaN

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Logical 的更多信息

提问:

2012-6-20

Community Treasure Hunt

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

Start Hunting!

Translated by