MATLAB Answers

Rita
0

How to write this simple script correctly?

Asked by Rita
on 11 Aug 2015
Latest activity Commented on by Rita
on 11 Aug 2015
Hi I have
s=[1 0 1;0 0 0];
b=[2 3 4];
I would like to have this as a result
c=[nan 3 nan;2 3 4]
I mean replace 1 by nan and o by b.
for r= 1:3
s_ind = find(s(:,r) == 1);
s(s_ind)=nan;
m(:,r)=s
a_ind = find(s(:,r) == 0);
% I don't know how to replace for 0 from matrix b??
end
any help would be appreciated in advance.

  0 Comments

Sign in to comment.

2 Answers

Answer by Stephen Cobeldick on 11 Aug 2015
Edited by Stephen Cobeldick on 11 Aug 2015
 Accepted Answer

Simply using logical indexing:
>> s = [1,0,1;0,0,0];
>> b = [2,3,4];
>> out = repmat(b,size(s,1),1);
>> out(s==1) = NaN
out =
NaN 3 NaN
2 3 4

  1 Comment

Thanks for your quick responses.

Sign in to comment.


Answer by Star Strider
on 11 Aug 2015

You can use logical indexing, although you need two separate steps to assign the elements of ‘b’ and ‘NaN’ to ‘c’ because you have two separate conditions.
One possibility:
s=[1 0 1;0 0 0];
b=[2; 3; 4];
mb = repmat(b', 2, 1); % Create Matrix Matching ‘s’ From ‘b’
c = s; % Create ‘c’
c(~c) = mb(~c); % Assign Elements Of ‘mb’ To Zero Elements Of ‘c’
c(c==1) = NaN; % Assign ‘NaN’ To ‘c’ = 1

  0 Comments

Sign in to comment.