<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Matthew, </div><div class="">maybe it is not the best place to discuss problems of pandas, but to show that I am not missing something, let's consider a simple example.</div><div class=""><br class=""></div><div class=""><pre style="font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;" class=""><span style="color: rgb(105, 105, 105);" class=""># simplest DataFrame</span>
x <span style="color: rgb(128, 128, 48);" class="">=</span> pandas<span style="color: rgb(128, 128, 48);" class="">.</span>DataFrame<span style="color: rgb(128, 128, 48);" class="">(</span><span style="color: rgb(64, 0, 0);" class="">dict</span><span style="color: rgb(128, 128, 48);" class="">(</span>a<span style="color: rgb(128, 128, 48);" class="">=</span>numpy<span style="color: rgb(128, 128, 48);" class="">.</span>arange<span style="color: rgb(128, 128, 48);" class="">(</span><span style="color: rgb(0, 140, 0);" class="">10</span><span style="color: rgb(128, 128, 48);" class="">)</span><span style="color: rgb(128, 128, 48);" class="">,</span> b<span style="color: rgb(128, 128, 48);" class="">=</span>numpy<span style="color: rgb(128, 128, 48);" class="">.</span>arange<span style="color: rgb(128, 128, 48);" class="">(</span><span style="color: rgb(0, 140, 0);" class="">10</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(0, 140, 0);" class="">20</span><span style="color: rgb(128, 128, 48);" class="">)</span><span style="color: rgb(128, 128, 48);" class="">)</span><span style="color: rgb(128, 128, 48);" class="">)</span>

<span style="color: rgb(105, 105, 105);" class=""># simplest indexing. Can you predict results without looking at comments?</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(128, 128, 48);" class="">:</span><span style="color: rgb(0, 140, 0);" class="">2</span><span style="color: rgb(128, 128, 48);" class="">]</span>         <span style="color: rgb(105, 105, 105);" class=""># returns two first rows, as expected</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 140, 0);" class="">0</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(0, 140, 0);" class="">1</span><span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">]</span>    <span style="color: rgb(105, 105, 105);" class=""># returns copy of x, whole dataframe</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span>numpy<span style="color: rgb(128, 128, 48);" class="">.</span>array<span style="color: rgb(128, 128, 48);" class="">(</span><span style="color: rgb(0, 140, 0);" class="">2</span><span style="color: rgb(128, 128, 48);" class="">)</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(105, 105, 105);" class=""># fails with IndexError: indices are out-of-bounds (can you guess why?)</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 140, 0);" class="">0</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(0, 140, 0);" class="">1</span><span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(128, 128, 48);" class="">:</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(105, 105, 105);" class=""># unhashable type: list</span></pre></div><div class=""><br class=""></div><div class="">just in case - I know about .loc and .iloc, but when you write code with many subroutines, you concentrate on numpy inputs, and at some point you simply <i class="">forget</i> to convert some of the data you operated with to numpy and it <i class="">continues</i> to work, but it yields wrong results (while you tested everything, but you tested this for numpy). Checking all the inputs in each small subroutine is strange.</div><div class=""><br class=""></div><div class="">Ok, a bit more:</div><div class=""><pre style="font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;" class="">x<span style="color: rgb(128, 128, 48);" class="">[</span>x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">5</span><span style="color: rgb(128, 128, 48);" class="">]</span>        <span style="color: rgb(105, 105, 105);" class=""># works as expected</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span>x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">5</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(128, 128, 48);" class="">:</span><span style="color: rgb(128, 128, 48);" class="">]</span>     <span style="color: rgb(105, 105, 105);" class=""># 'Series' objects are mutable, thus they cannot be hashed</span>
lookup <span style="color: rgb(128, 128, 48);" class="">=</span> numpy<span style="color: rgb(128, 128, 48);" class="">.</span>arange<span style="color: rgb(128, 128, 48);" class="">(</span><span style="color: rgb(0, 140, 0);" class="">10</span><span style="color: rgb(128, 128, 48);" class="">)</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span>lookup<span style="color: rgb(128, 128, 48);" class="">[</span>x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">5</span><span style="color: rgb(128, 128, 48);" class="">]</span>     <span style="color: rgb(105, 105, 105);" class=""># works as expected</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span>lookup<span style="color: rgb(128, 128, 48);" class="">[</span>x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">5</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(128, 128, 48);" class="">:</span><span style="color: rgb(128, 128, 48);" class="">]</span>  <span style="color: rgb(105, 105, 105);" class=""># TypeError: unhashable type: 'numpy.ndarray'</span>

x<span style="color: rgb(128, 128, 48);" class="">[</span>lookup<span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span>   <span style="color: rgb(105, 105, 105);" class=""># indexError</span>
x<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">[</span>lookup<span style="color: rgb(128, 128, 48);" class="">]</span>   <span style="color: rgb(105, 105, 105);" class=""># works as expected</span></pre></div><div class=""><br class=""></div><div class="">Now let's go a bit further: train/test splitted the data for machine learning (again, the most frequent operation)</div><div class=""><br class=""></div><div class=""><pre style="font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;" class=""><span style="color: rgb(128, 0, 0); font-weight: bold;" class="">from</span> sklearn<span style="color: rgb(128, 128, 48);" class="">.</span>model_selection <span style="color: rgb(128, 0, 0); font-weight: bold;" class="">import</span> train_test_split
x1<span style="color: rgb(128, 128, 48);" class="">,</span> x2 <span style="color: rgb(128, 128, 48);" class="">=</span> train_test_split<span style="color: rgb(128, 128, 48);" class="">(</span>x<span style="color: rgb(128, 128, 48);" class="">,</span> random_state<span style="color: rgb(128, 128, 48);" class="">=</span><span style="color: rgb(0, 140, 0);" class="">42</span><span style="color: rgb(128, 128, 48);" class="">)</span>

<span style="color: rgb(105, 105, 105);" class=""># compare next to operations with pandas.DataFrame</span>
col <span style="color: rgb(128, 128, 48);" class="">=</span> x1<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 0, 230);" class="">'a'</span><span style="color: rgb(128, 128, 48);" class="">]</span>
<span style="color: rgb(128, 0, 0); font-weight: bold;" class="">print</span> col<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(128, 128, 48);" class="">:</span><span style="color: rgb(0, 140, 0);" class="">2</span><span style="color: rgb(128, 128, 48);" class="">]</span>       <span style="color: rgb(105, 105, 105);" class=""># first two elements</span>
<span style="color: rgb(128, 0, 0); font-weight: bold;" class="">print</span> col<span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(128, 128, 48);" class="">[</span><span style="color: rgb(0, 140, 0);" class="">0</span><span style="color: rgb(128, 128, 48);" class="">,</span> <span style="color: rgb(0, 140, 0);" class="">1</span><span style="color: rgb(128, 128, 48);" class="">]</span><span style="color: rgb(128, 128, 48);" class="">]</span>  <span style="color: rgb(105, 105, 105);" class=""># doesn't fail (while there in no row with index 0), fills it with NaN</span>
<span style="color: rgb(128, 0, 0); font-weight: bold;" class="">print</span> col<span style="color: rgb(128, 128, 48);" class="">[</span>numpy<span style="color: rgb(128, 128, 48);" class="">.</span>arange<span style="color: rgb(128, 128, 48);" class="">(</span><span style="color: rgb(0, 140, 0);" class="">2</span><span style="color: rgb(128, 128, 48);" class="">)</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(105, 105, 105);" class=""># same as previous</span>

<span style="color: rgb(128, 0, 0); font-weight: bold;" class="">print</span> col<span style="color: rgb(128, 128, 48);" class="">[</span>col <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">4</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(105, 105, 105);" class=""># as expected</span>
<span style="color: rgb(128, 0, 0); font-weight: bold;" class="">print</span> col<span style="color: rgb(128, 128, 48);" class="">[</span>col<span style="color: rgb(128, 128, 48);" class="">.</span>values <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">4</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(105, 105, 105);" class=""># as expected</span>
<span style="color: rgb(128, 0, 0); font-weight: bold;" class="">print</span> col<span style="color: rgb(128, 128, 48);" class="">.</span>values<span style="color: rgb(128, 128, 48);" class="">[</span>col <span style="color: rgb(68, 170, 221);" class="">></span> <span style="color: rgb(0, 140, 0);" class="">4</span><span style="color: rgb(128, 128, 48);" class="">]</span> <span style="color: rgb(105, 105, 105);" class=""># converts boolean to int, uses int indexing, but at least raises warning</span></pre></div><div class=""><br class=""></div><div class="">Mistakes done by such silent misoperating are not easy to detect (when your data pipeline consists of several steps), quite hard to locate the source of problem and almost impossible to be sure that you indeed avoided all such caveats. Code review turns into paranoidal process (if you care about the result, of course).</div><div class=""><br class=""></div><div class="">Things are even worse, because I've demonstrated this for my installation, and probably if you run this with some other pandas installation, you get some other results (that were really basic operations). So things that worked ok in one version, may work different way in the other, this becomes completely intractable. </div><div class=""><br class=""></div><div class="">Pandas may be nice, if you need a report, and you need get it done tomorrow. Then you'll throw away the code. When we initially used pandas as main data storage in yandex/rep, it looked like an good idea, but a year later it was obvious this was a wrong decision. In case when you build data pipeline / research that should be working several years later (using some other installation by someone else), usage of pandas shall be <i class="">minimal</i>. </div><div class=""><br class=""></div><div class="">That's why I am looking for a reliable pandas substitute, which should be: </div><div class="">- completely consistent with numpy and should fail when this wasn't implemented / impossible</div><div class="">- fewer new abstractions, nobody wants to learn one-more-way-to-manipulate-the-data, specifically other researchers</div><div class="">- it may be less convenient for interactive data mungling</div><div class="">  - in particular, less methods is ok</div><div class="">- written code should be interpretable, and hardly can be misinterpreted.</div><div class="">- not super slow, 1-10 gigabytes datasets are a normal situation</div><div class=""><br class=""></div><div class="">Well, that's it. </div><div class="">Sorry for large letter.</div><div class=""><br class=""></div><div class="">Alex.</div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">22 февр. 2017 г., в 18:38, Matthew Harrigan <<a href="mailto:harrigan.matthew@gmail.com" class="">harrigan.matthew@gmail.com</a>> написал(а):</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Alex,<br class=""><br class=""></div>Can you please post some code showing exactly what you are trying to do and any issues you are having, particularly the "irritating problems with its row indexing and some other problems" you quote above?<br class=""></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Wed, Feb 22, 2017 at 10:34 AM, Robert McLeod <span dir="ltr" class=""><<a href="mailto:robbmcleod@gmail.com" target="_blank" class="">robbmcleod@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">Just as a note, Appveyor supports uploading modules to "public websites":<div class=""><br class=""></div><div class=""><a href="https://packaging.python.org/appveyor/" target="_blank" class="">https://packaging.python.org/<wbr class="">appveyor/</a><br class=""></div><div class=""><br class=""></div><div class="">The main issue I would see from this, is the PyPi has my password stored on my machine in a plain text file.   I'm not sure whether there's a way to provide Appveyor with a SSH key instead.</div></div><div class="gmail_extra"><div class=""><div class="h5"><br class=""><div class="gmail_quote">On Wed, Feb 22, 2017 at 4:23 PM, Alex Rogozhnikov <span dir="ltr" class=""><<a href="mailto:alex.rogozhnikov@yandex.ru" target="_blank" class="">alex.rogozhnikov@yandex.ru</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">Hi <span style="font-family:arial,helvetica,sans-serif" class="">Francesc</span>, </div><div class="">thanks a lot for you reply and for your impressive job on bcolz! </div><div class=""><br class=""></div><div class="">Bcolz seems to make stress on compression, which is not of much interest for me, but the <i class="">ctable</i>, and chunked operations look very appropriate to me now. (Of course, I'll need to test it much before I can say this for sure, that's current impression).</div><div class=""><br class=""></div><div class="">The strongest concern with bcolz so far is that it seems to be completely non-trivial to install on windows systems, while pip provides binaries for most (or all?) OS for numpy. </div><div class="">I didn't build pip binary wheels myself, but is it hard / impossible to cook pip-installabel binaries?</div><div class=""><br class=""></div><div class=""><span class=""><blockquote type="cite" class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​You can change shapes of numpy arrays, but that usually involves copies of the whole container.</div></div></div></div></div></blockquote></span>sure, but this is ok for me, as I plan to organize column editing in 'batches', so this should require seldom copying. </div><div class="">It would be nice to see an example to understand how deep I need to go inside numpy.</div><div class=""><br class=""></div><div class="">Cheers, </div><div class="">Alex. </div><div class=""> </div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div class=""><blockquote type="cite" class=""><div class="">22 февр. 2017 г., в 17:03, Francesc Alted <<a href="mailto:faltet@gmail.com" target="_blank" class="">faltet@gmail.com</a>> написал(а):</div><div class=""><div class="m_-3140438019934863550h5"><br class="m_-3140438019934863550m_-427297024567583333Apple-interchange-newline"><div class=""><div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Hi Alex,</div><div class="gmail_extra"><br class=""><div class="gmail_quote">2017-02-22 12:45 GMT+01:00 Alex Rogozhnikov<span class="m_-3140438019934863550m_-427297024567583333Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:alex.rogozhnikov@yandex.ru" target="_blank" class="">alex.rogozhnikov@<wbr class="">yandex.ru</a>></span>:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">Hi Nathaniel, </div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div dir="auto" class=""><div dir="auto" class="">pandas</div></div></blockquote><br class=""></div><div class="">yup, the idea was to have minimal pandas.DataFrame-like storage (which I was using for a long time), </div><div class="">but without irritating problems with its row indexing and some other problems like interaction with matplotlib.</div><div class=""><br class=""></div><div class=""><div class=""><blockquote type="cite" class=""><div dir="auto" class=""><div dir="auto" class="">A dict of arrays?</div></div></blockquote></div><div class=""><br class=""></div><div class="">that's what I've started from and implemented, but at some point I decided that I'm reinventing the wheel and numpy has something already. In principle, I can ignore this 'column-oriented' storage requirement, but potentially it may turn out to be quite slow-ish if dtype's size is large.</div></div><div class=""><br class=""></div><div class="">Suggestions are welcome.</div></div></blockquote><div class=""><br class=""></div><div class=""><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​You may want to try bcolz:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br class=""></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><a href="https://github.com/Blosc/bcolz" target="_blank" class="">https://github.com/Blosc/bcolz</a></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br class=""></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">bcolz is a columnar storage, basically as you require, but data is compressed by default even when stored in-memory (although you can disable compression if you want to).​</div><br class=""></div><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class="">Another strange question:</div><div class="">in general, it is considered that once numpy.array is created, it's shape not changed. </div><div class="">But if i want to keep the same recarray and change it's dtype and/or shape, is there a way to do this?</div></div></blockquote><div class=""><br class=""></div><div class=""><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​You can change shapes of numpy arrays, but that usually involves copies of the whole container.  With bcolz you can change length and add/del columns without copies.​  If your containers are large, it is better to inform bcolz on its final estimated size.  See:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br class=""></div><div class="gmail_default"><font face="arial, helvetica, sans-serif" class=""><a href="http://bcolz.blosc.org/en/latest/opt-tips.html" target="_blank" class="">http://bcolz.blosc.org/en/late<wbr class="">st/opt-tips.html</a></font><br class=""></div><br class=""></div><div class=""><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​Francesc​</div></div><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class="">Thanks, </div><div class="">Alex.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class="">22 февр. 2017 г., в 3:53, Nathaniel Smith <<a href="mailto:njs@pobox.com" target="_blank" class="">njs@pobox.com</a>> написал(а):</div><br class="m_-3140438019934863550m_-427297024567583333gmail-m_2817944884559285036Apple-interchange-newline"><div class=""><div class=""><div class="m_-3140438019934863550m_-427297024567583333gmail-h5"><div dir="auto" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote">On Feb 21, 2017 3:24 PM, "Alex Rogozhnikov" <<a href="mailto:alex.rogozhnikov@yandex.ru" target="_blank" class="">alex.rogozhnikov@yandex.ru</a>> wrote:<br type="attribution" class=""><blockquote class="m_-3140438019934863550m_-427297024567583333gmail-m_2817944884559285036quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">Ah, got it. Thanks, Chris!</div><div class="">I thought recarray can be only one-dimensional (like tables with named columns).</div><div class=""><br class=""></div><div class="">Maybe it's better to ask directly what I was looking for: </div><div class="">something that works like a table with named columns (but no labelling for rows), and keeps data (of different dtypes) in a column-by-column way (and this is numpy, not pandas). </div><div class=""><br class=""></div><div class="">Is there such a magic thing?</div></div></blockquote></div></div></div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">Well, that's what pandas is for...</div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">A dict of arrays?</div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">-n</div></div></div></div><span class="m_-3140438019934863550m_-427297024567583333gmail-">______________________________<wbr class="">_________________<br class="">NumPy-Discussion mailing list<br class=""><a href="mailto:NumPy-Discussion@scipy.org" target="_blank" class="">NumPy-Discussion@scipy.org</a><br class=""><a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank" class="">https://mail.scipy.org/mailman<wbr class="">/listinfo/numpy-discussion</a><br class=""></span></div></blockquote></div><br class=""></div><br class="">______________________________<wbr class="">_________________<br class="">NumPy-Discussion mailing list<br class=""><a href="mailto:NumPy-Discussion@scipy.org" target="_blank" class="">NumPy-Discussion@scipy.org</a><br class=""><a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank" class="">https://mail.scipy.org/mailman<wbr class="">/listinfo/numpy-discussion</a><br class=""><br class=""></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>--<span class="m_-3140438019934863550m_-427297024567583333Apple-converted-space"> </span><br class=""><div class="m_-3140438019934863550m_-427297024567583333gmail_signature">Francesc Alted</div></div></div><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">______________________________<wbr class="">_________________</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important" class="">NumPy-Discussion mailing list</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><a href="mailto:NumPy-Discussion@scipy.org" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank" class="">NumPy-Discussion@scipy.org</a><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class=""><a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank" class="">https://mail.scipy.org/mailman<wbr class="">/listinfo/numpy-discussion</a></div></div></div></blockquote></div><br class=""></div><br class="">______________________________<wbr class="">_________________<br class="">
NumPy-Discussion mailing list<br class="">
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank" class="">NumPy-Discussion@scipy.org</a><br class="">
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank" class="">https://mail.scipy.org/mailman<wbr class="">/listinfo/numpy-discussion</a><br class="">
<br class=""></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""></div></div><div class="m_-3140438019934863550gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class="">Robert McLeod, Ph.D.<br class="">Center for Cellular Imaging and Nano Analytics (C-CINA)</div><div dir="ltr" class="">Biozentrum der Universität Basel</div><div dir="ltr" class="">Mattenstrasse 26, 4058 Basel<br class="">Work: <a href="tel:+41%2061%20387%2032%2025" value="+41613873225" target="_blank" class="">+41.061.387.3225</a><br class=""><a href="mailto:robert.mcleod@unibas.ch" target="_blank" class="">robert.mcleod@unibas.ch</a></div><div dir="ltr" class=""><span style="font-size:small" class=""><a href="mailto:robert.mcleod@ethz.ch" target="_blank" class="">robert.mcleod@bsse.ethz.ch</a></span></div><div class=""><a href="mailto:robbmcleod@gmail.com" target="_blank" class="">robbmcleod@gmail.com</a><br class=""></div></div></div></div></div></div></div></div></div></div>
</div>
<br class="">______________________________<wbr class="">_________________<br class="">
NumPy-Discussion mailing list<br class="">
<a href="mailto:NumPy-Discussion@scipy.org" class="">NumPy-Discussion@scipy.org</a><br class="">
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank" class="">https://mail.scipy.org/<wbr class="">mailman/listinfo/numpy-<wbr class="">discussion</a><br class="">
<br class=""></blockquote></div><br class=""></div>
_______________________________________________<br class="">NumPy-Discussion mailing list<br class=""><a href="mailto:NumPy-Discussion@scipy.org" class="">NumPy-Discussion@scipy.org</a><br class="">https://mail.scipy.org/mailman/listinfo/numpy-discussion<br class=""></div></blockquote></div><br class=""></body></html>