Dream, not what is, but what can be.

Convert Python numpy and .Net arrays

Python code

from System.Runtime.InteropServices import Marshal
from System import Array, Double, IntPtr
import numpy as np

# Convert .Net array to Python array
def convNetarray2Nparray(arrayIn):
    arrayOut = np.empty(len(arrayIn))
    Marshal.Copy(arrayIn, 0, IntPtr.__overloads__[long](arrayOut.__array_interface__['data'][0]), len(arrayIn))
    return arrayOut

# Convert Python array to .Net array
def convNparray2Netarray(arrayIn):
    arrayOut = Array.CreateInstance(Double,len(arrayIn))
    Marshal.Copy(IntPtr.__overloads__[long](arrayIn.__array_interface__['data'][0]),arrayOut,0, len(arrayOut))
    return arrayOut

    # SLOW FOR LARGE ARRAYS
    #arrayOut = Array.CreateInstance(Single,len(arrayIn))
    #it = np.nditer(arrayIn,flags=['multi_index'])
    #while not it.finished:
    #    ix = it.multi_index
    #    if len(ix)==1:
    #        arrayOut[ix[0]] = arrayIn[ix[0]]
    #    else:
    #        arrayOut[ix] = arrayIn[ix]
    #    it.iternext()
    #return arrayOut

Posted on Thursday, October 13, 2016 9:49 AM


32 bit dll in a 64 bit app

If use a 32 bit dll in a 64 bit application you will get a BadFormatException.

Created an out-of-process COM Server to host the 32 bit dll / logic. Register it on the PC and then can call it from the application.

Used COM Server from CSExeCOMServer

In the Build Event added

echo Generate and register type library.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /tlb "$(TargetPath)"
echo Register the component.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "$(TargetPath)"

Client Code:

Type comType = Type.GetTypeFromProgID("COMServerName.ObjecteName");
dynamic targetCom = Activator.CreateInstance(comType);
dynamic target = targetCom.TargetProperty;

Posted on Saturday, October 22, 2016 3:17 PM


Python.Net

python.net

using (Py.GIL())
{
    dynamic imp = Py.Import("imp");
    dynamic rem = imp.load_source("CustomPyFile", string.Format("{0}/CustomPyFile.py", Directory.GetCurrentDirectory()));

    // named tuple
    dynamic argList = rem.NamedTupleVar;
    argList.Name1 = new PyInt(1000);
    dynamic myRem = rem.CustomClassName(argList);

    // array test
    dynamic np = Py.Import("numpy");
    List<float> floats = new List<float>();
    Random rand = new Random();

    for (int i = 0; i < 240000; i++)
    {
        floats.Add(rand.Next());
    }
    myRem.Method1(np.array(floats));

    // get
    dynamic getValues = myRem.Method3();
    Console.WriteLine(getValues.GetAttr("propertyName").ToString();

    Console.Read();
}

Posted on Thursday, September 15, 2016 12:22 PM


Real Ear Measurement using NAudio and Python.Net

Integrated Python For .Net and NAudio (ASIO sound drivers) for a Real Ear Measurement (REM) system.

Posted on Friday, August 19, 2016 7:24 PM


NAudio to record / play ASIO sound drivers

Using NAudio for record and play ASIO sound drivers

Posted on Friday, August 19, 2016 7:22 PM


Integrating Python into .Net app using Python For .Net

Using Python For .Net to call Python methods from C#

Also to call the methods from a class I had to decorate the Python class method with @ClassMethod

Also, still need to find a way to pass an array into the method. So far have to pass a List and convert in the Python method :(

PythonEngine.Initialize();
var lck = PythonEngine.AcquireLock();

PyObject pyportal = PythonEngine.ImportModule(@"SomePyFile"); // .py file
PyObject c = pyportal.GetAttr("ClassName"); // class name in .py file

PyList ls = new PyList(new PyObject[3] { new PyFloat(1.0), new PyFloat(1.0), new PyFloat(1.0) });
c.InvokeMethod("SomeMethod", ls).ToString(); // some method in ClassName

string fromPython = "";
for (int i = 0; i < 100; i++)
{
    fromPython = c.InvokeMethod("AnotherMethod").ToString();
}

PythonEngine.ReleaseLock(lck);
PythonEngine.Shutdown();

IronPython does not implement some CPython packages like scipy.fftpack - get cannot import multiarray from numpy.core error

Posted on Friday, August 12, 2016 2:42 PM


Tour de Tonka 2016

Rode 100 mile route with Kelly Fitz and Adrian Lister. Very fast - rode with the pack the whole way.

Posted on Saturday, August 06, 2016 6:49 PM


CSV with data containing comma

using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll
...
using (var csvReader = new TextFieldParser(fileName))
{
    csvReader.SetDelimiters(new string[] { "," });
    csvReader.HasFieldsEnclosedInQuotes = true;

    while (!csvReader.EndOfData)
     {
         string[] row = csvReader.ReadFields();
         ...
     }
}

Posted on Friday, June 17, 2016 12:20 PM


Azure Internet of Things (IoT)

Putting together an IoT concept app using Azure IoTHub, Service Bus, Event Hubs, Streaming Analytics, and Power BI using my MSDN credits. Good stuff. Next I will hook it up to a mobile app for an end to end demo.

Posted on Friday, April 22, 2016 6:40 AM


Azure Event Hub

Putting a ; at the end of an Azure Event Hub connection string causes an Invalid Token Error. Wow, frustrating.

Posted on Friday, April 22, 2016 6:39 AM