I am not completely sure that I understand the question. The way you phrase it seems different than what the Matlab code seems to be saying. Your statement seems to say that if there's a single zero in the g2
list between the 1st and 31st item then all the items in the f2
list should be 0 between the 1st and 31st item. The Matlab code seems to be saying that the corresponding items in the f2
list to the zero entries in the g2
list should be made zero. Which would you like to do?
Here is an approach to the first interpretation (which seems not to be what the MatLab code is doing:
In[1]:= g2 = RandomReal[{.1, 1}, 40];
In[2]:= f2 = RandomReal[{.1, 1}, 40];
In[3]:= If[ MatchQ[Min[g2[[;; 31]]], 0 | 0.0], f2[[;; 31]] = 0]
In[4]:= f2
Out[4]= {0.698859, 0.679363, 0.423911, 0.483623, 0.787595, 0.612751, \
0.40243, 0.843678, 0.311282, 0.845609, 0.299857, 0.538917, 0.589583, \
0.483163, 0.19414, 0.578614, 0.525849, 0.562604, 0.21003, 0.218967, \
0.124448, 0.424428, 0.121839, 0.785187, 0.892473, 0.754695, 0.641295, \
0.129707, 0.311679, 0.297364, 0.712806, 0.452036, 0.98209, 0.729761, \
0.759641, 0.193543, 0.321016, 0.878235, 0.294693, 0.47783}
In[5]:= g2 = ReplacePart[g2, 5 -> 0]
Out[5]= {0.973667, 0.520102, 0.322591, 0.810693, 0, 0.290913, \
0.81454, 0.320626, 0.440353, 0.102121, 0.507082, 0.610275, 0.334749, \
0.572815, 0.764794, 0.952593, 0.598201, 0.240492, 0.760991, 0.685671, \
0.353344, 0.767221, 0.196774, 0.455549, 0.745013, 0.669929, 0.949023, \
0.135557, 0.345527, 0.57963, 0.931332, 0.107634, 0.652246, 0.604232, \
0.422684, 0.301714, 0.535314, 0.555032, 0.586025, 0.66681}
In[6]:= If[ MatchQ[Min[g2[[;; 31]]], 0 | 0.0], f2[[;; 31]] = 0]
Out[6]= 0
In[7]:= f2
Out[7]= {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.452036, 0.98209, 0.729761, \
0.759641, 0.193543, 0.321016, 0.878235, 0.294693, 0.47783}
Here is one approach to the second interpretation:
In[2]:= g2 = RandomReal[{.1, 1}, 40];
In[4]:= g2 = ReplacePart[g2, {5 -> 0, 9 -> 0}]
Out[4]= {0.230691, 0.639585, 0.558889, 0.229718, 0, 0.827236, \
0.174744, 0.857889, 0, 0.455408, 0.86698, 0.380685, 0.809134, \
0.431981, 0.904197, 0.285284, 0.661542, 0.730948, 0.163582, 0.488968, \
0.737741, 0.145129, 0.477019, 0.541634, 0.432796, 0.618783, 0.417761, \
0.679858, 0.535588, 0.403186, 0.671502, 0.135117, 0.7191, 0.545737, \
0.156862, 0.64611, 0.643755, 0.273114, 0.335791, 0.148722}
In[5]:= f2 = RandomReal[{.1, 1}, 40];
In[6]:= zeroPositions = Flatten@Position[g2, 0 | 0.0]
Out[6]= {5, 9}
In[8]:= f2 = ReplacePart[f2, Thread[zeroPositions -> 0]]
Out[8]= {0.176758, 0.559801, 0.46467, 0.104863, 0, 0.429054, \
0.911004, 0.782487, 0, 0.880667, 0.867404, 0.964007, 0.241012, \
0.306318, 0.430069, 0.892654, 0.231851, 0.483184, 0.396506, 0.807405, \
0.451575, 0.948987, 0.161917, 0.349105, 0.800152, 0.123666, 0.966727, \
0.152303, 0.343645, 0.970657, 0.988564, 0.732112, 0.524944, 0.224724, \
0.186885, 0.842012, 0.853349, 0.563648, 0.999071, 0.16213}
And here is a very procedural approach that is made to look like what the Matlab thing is doing...
In[1]:= g2 = RandomReal[{.1, 1}, 40];
In[2]:= g2 = ReplacePart[g2, {5 -> 0, 9 -> 0}]
Out[2]= {0.619508, 0.822774, 0.225996, 0.375215, 0, 0.560112, \
0.156866, 0.516555, 0, 0.578736, 0.251348, 0.789907, 0.206223, \
0.369297, 0.233854, 0.72312, 0.666346, 0.774993, 0.869128, 0.26047, \
0.191136, 0.928748, 0.79583, 0.449014, 0.867915, 0.807733, 0.557077, \
0.362091, 0.967622, 0.224682, 0.123236, 0.231585, 0.247277, 0.212286, \
0.470056, 0.900049, 0.423985, 0.159262, 0.136103, 0.467753}
In[3]:= f2 = RandomReal[{.1, 1}, 40];
In[4]:= Do[If[MatchQ[g2[[i]], 0 | 0.0], f2[[i]] = 0], {i, 1, 31}];
In[5]:= f2
Out[5]= {0.231379, 0.305591, 0.574086, 0.465205, 0, 0.474641, \
0.516748, 0.522352, 0, 0.116524, 0.144332, 0.360361, 0.935265, \
0.166802, 0.116729, 0.730945, 0.13133, 0.652938, 0.55189, 0.653582, \
0.313277, 0.293528, 0.771225, 0.70616, 0.449017, 0.42196, 0.731467, \
0.272375, 0.881962, 0.19469, 0.85515, 0.762194, 0.132967, 0.448983, \
0.842266, 0.196552, 0.608901, 0.510816, 0.374962, 0.964426}