Sho vs. numpy/scipy


  • Hi Sho Team

    Sho looks quite amazing and seems to finally fill the gap between .NET and numerical computing. I've got a few questions though:

    - how does Sho relate to the numpy/scipy refactoring project, where Microsoft is partnering with Enthought ( It seems to me that these projects have a big overlap except that the Sho syntax is more Matlab oriented and the numpy/scipy syntax is more Python oriented. Am I totally wrong here?

    - I am also missing a function overview in the Book of Sho (e.g. existing functions like 'repmat' and 'reshape' are nowhere mentioned)

    - what about further development plans? I am missing a few standard functions like unique, sortrows

    - will there ever be the possibility to commercially use the software?



    Monday, January 31, 2011 10:40 PM

All replies

  • Thanks Felix, these are great questions; I'll give you the best answers I can for right now.

    1.  numpy/scipy: my understanding is that the Enthought project is geared towards making NumPy and SciPy fully compatible with and usable from IronPython, while we have a broader .NET audience in mind.  Our goal is to have the Sho libraries by usable (and friendly) from any .NET language (IronPython, C#, Managed C++, F#, etc.).

    2. You're quite right, The Book of Sho doesn't describe every function - it's meant more as a primer than a full command reference.  You can get more comprehensive coverage from inside Sho - typing help(help) will show you a variety of mechanisms for browsing command documentation.

    3. We're still actively working on Sho, and certainly welcome suggestions for new functionality!  In the case of the particular functions you're asking about, there are some easy ways to do it with Sho.  For sortrows, if d is a vector, you can just do d.Sort().  If it's a matrix and you want to sort by column col, you can chain the operations and do d[(d[:,0].SortIndex())[1],:]. unique() is something I do fairly often as well, and it's not a one-liner and we should probably make a shortcut for it.  I often do it one "line" in the following way (where d is a vector of ints):  h = dict(); [h.Add(elt,0) for elt in d]; res = IntArray.From(h.Keys).  res will then contain the unique values.

    4. Commercial availability - great question. Note that internal prototyping with Sho is certainly allowed even for commercial entities; we don't allow shipping the bits for commercial purposes.  This is mainly because Sho is still a research prototype, and we wouldn't be able to provide the kind of support that a full-on commercial product would need right now.  However, if we see strong demand for customers to have this, it's something we will definitely consider.  If you have particular questions about a usage that you're not sure fits the license, feel free to drop us a line at .

    I hope that clears up some of your questions!

    • Proposed as answer by Yin Zhu Tuesday, April 12, 2011 9:24 AM
    Friday, February 11, 2011 5:09 PM
  • Thanks very much! This helped a lot!


    Monday, February 14, 2011 9:12 PM