您可以從.NET中使用pythonnet(C#下面的代碼被複制從GitHub)調用numpy的。可以將它們轉換爲界面上的Python列表,但這會降低某些情況下的性能。
https://github.com/pythonnet/pythonnet/tree/develop
static void Main(string[] args)
{
using (Py.GIL()) {
dynamic np = Py.Import("numpy");
dynamic sin = np.sin;
Console.WriteLine(np.cos(np.pi*2));
Console.WriteLine(sin(5));
double c = np.cos(5) + sin(5);
Console.WriteLine(c);
dynamic a = np.array(new List<float> { 1, 2, 3 });
dynamic b = np.array(new List<float> { 6, 5, 4 }, Py.kw("dtype", np.int32));
Console.WriteLine(a.dtype);
Console.WriteLine(b.dtype);
Console.WriteLine(a * b);
Console.ReadKey();
}
}
輸出:
1.0
-0.958924274663
-0.6752620892
float64
int32
[ 6. 10. 12.]
這裏張貼在github例如使用F#:
https://github.com/pythonnet/pythonnet/issues/112
open Python.Runtime
open FSharp.Interop.Dynamic
open System.Collections.Generic
[<EntryPoint>]
let main argv =
//set up for garbage collection?
use gil = Py.GIL()
//-----
//NUMPY
//import numpy
let np = Py.Import("numpy")
//call a numpy function dynamically
let sinResult = np?sin(5)
//make a python list the hard way
let list = new Python.Runtime.PyList()
list.Append(new PyFloat(4.0))
list.Append(new PyFloat(5.0))
//run the python list through np.array dynamically
let a = np?array(list)
let sumA = np?sum(a)
//again, but use a keyword to change the type
let b = np?array(list, Py.kw("dtype", np?int32))
let sumAB = np?add(a,b)
let SeqToPyFloat (aSeq : float seq) =
let list = new Python.Runtime.PyList()
aSeq |> Seq.iter(fun x -> list.Append(new PyFloat(x)))
list
//Worth making some convenience functions (see below for why)
let a2 = np?array([|1.0;2.0;3.0|] |> SeqToPyFloat)
//--------------------
//Problematic cases: these run but don't give good results
//make a np.array from a generic list
let list2 = [|1;2;3|] |> ResizeArray
let c = np?array(list2)
printfn "%A" c //gives type not value in debugger
//make a np.array from an array
let d = np?array([|1;2;3|])
printfn "%A" d //gives type not value in debugger
//use a np.array in a function
let sumD = np?sum(d) //gives type not value in debugger
//let sumCD = np?add(d,d) // this will crash
//can't use primitive f# operators on the np.arrays without throwing an exception; seems
//to work in c# https://github.com/tonyroberts/pythonnet //develop branch
//let e = d + 1
//-----
//NLTK
//import nltk
let nltk = Py.Import("nltk")
let sentence = "I am happy"
let tokens = nltk?word_tokenize(sentence)
let tags = nltk?pos_tag(tokens)
let taggedWords = nltk?corpus?brown?tagged_words()
let taggedWordsNews = nltk?corpus?brown?tagged_words(Py.kw("categories", "news"))
printfn "%A" taggedWordsNews
let tlp = nltk?sem?logic?LogicParser(Py.kw("type_check",true))
let parsed = tlp?parse("walk(angus)")
printfn "%A" parsed?argument
0 // return an integer exit code
它怎麼說,一半的東西你問Ø在這個.NET領域,這個虛擬大廳顯示器會被投票嗎? 我字面上*有*將這種態度歸因於我是否轉到.NET。 – bordeo