How to write this simple script correctly?

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.

 Respuesta aceptada

Stephen23
Stephen23 el 11 de Ag. de 2015
Editada: Stephen23 el 11 de Ag. de 2015
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

Más respuestas (1)

Star Strider
Star Strider el 11 de Ag. de 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

Preguntada:

el 11 de Ag. de 2015

Comentada:

el 11 de Ag. de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by