<p><span style="padding: 3px 10px; border-radius: 5px; color: #ffffff; font-weight: bold; display: inline-block; background-color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;External Email - Use Caution&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p><p></p><div dir="ltr">Colleagues,<div><br></div><div>My work is primarily done outside MNE, with the exception of reading in EDF data and performing basic filtering. Yesterday I submitted a question to the moderator and received a very helpful answer, which I was encouraged to share with others.</div><div><br></div><div>The problem is essentially as follows:</div><div><br></div><div>Suppose I read in my EDF into a raw structure and visually annotate the data plot. Once I perform the annotations, is there a way to obtain the revised data matrix which is the original one with the annotations removed. Here&#39;s a synopsis of how to do so, where all work was done on a MAC with OSX 10.15.4, using IDLE and Python 3.7. </div><div><br></div><div>import mne as mn<br>import matplotlib.pyplot as plt<br>plt.switch_backend(&#39;TkAgg&#39;)<br>plt.ion()<br><br>raw = mn.io.read_raw_edf(&quot;/Users/fishbacp/data.edf&quot;, preload=True)<br><br>Fs=<a href="http://raw.info">raw.info</a>[&#39;sfreq&#39;]<br>data,times=raw[:,:]<br></div><div>raw.plot(block=True)   #At this stage we annotate our data visually. Once the plot window is closed, all annotation data is saved in raw.annotations.<br></div><div><br>starts=[int(t*Fs) for t in raw.annotations.onset]      #The annotation start times converted to indices using the sampling frequencies<br>lengths=[int(t*Fs) for t in raw.annotations.duration]     #The annotation durations converted to indices. <br></div><div><br></div><div>#Now remove from data those columns determined by the starts and lengths just computed. There are various means of doing so as discussed at </div><div><a href="https://stackoverflow.com/questions/62921389/the-most-efficient-way-to-delete-columns-of-a-matrix-based-upon-lists-of-startin/62923354#62923354">https://stackoverflow.com/questions/62921389/the-most-efficient-way-to-delete-columns-of-a-matrix-based-upon-lists-of-startin/62923354#62923354</a>.<br></div><div><br></div><div>Here&#39;s one way, where the result is stored in data_new:</div><div><br></div><div>cols = list(range(data.shape[1]))<br>remove = []<br>for i, s in enumerate(starts):<br>    remove += range(s, s+lengths[i])<br>saved_cols = list(set(cols).difference(set(remove)))<br>data_new=data[:,saved_cols]<br></div><div><br></div><div>A big thank you to the individual who provided assistance.</div><div><br></div><div>Best,</div><div><br></div><div>Paul Fishback</div><div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><font face="arial, sans-serif">Professor of Mathematics, Grand Valley State University </font></div><div dir="ltr"><div style="font-family:arial">Department of Mathematics (MAK C-2-408)</div><div style="font-family:arial">Grand Valley State University</div><div style="font-family:arial">1 Campus Dr.<br>Allendale, MI 49401<br><font color="#0000ff"><a href="mailto:fishbacp@mail.gvsu.edu" target="_blank">fishbacp@mail.gvsu.edu</a></font></div><div><font color="#0000ff"><span style="font-family:arial"><span title="Call with Google Voice"><span title="Call with Google Voice"><span title="Call with Google Voice">616.331.2040</span></span></span></span><br></font><span style="font-family:arial"><font color="#0000ff"><span title="Call with Google Voice"><span title="Call with Google Voice"><span title="Call with Google Voice">616.331.3120</span></span></span> </font>(fax)</span><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>