Я использую пакет Python nnet .netstandatd Nuget для получения данных из кода C# в сценарий python. Проблема: System.Int32 [] индексируется, но не является массивом в python
C# классе
namespace MyNamespace
{
public class MyClass
{
public int[] Test()
{
return new[]{ 1,2,3 };
}
}
}
и python коде, выполняемом в
using( Py.GIL() )
{
PythonEngine.Exec( myScriptString );
}
import sys
import numpy as np
# Import C# namespaces and classes
import clr
from MyNamespace import MyClass
myClass = MyClass()
array = myClass.Test()
print( 'Type of array:', type( array ) )
print( 'Length of array:', len( array ) )
print( 'First element of array:', array[0] )
npArray = np.array( array )
print( 'Type of npArray:', type( npArray ) )
print( 'Shape of npArray:', npArray.shape )
print( 'Length of npArray:', len( npArray ) )
print( 'First element of npArray:', npArray[0] )
И я получаю следующий результат:
Type of array: <class 'System.Int32[]'>
Length of array: 3
First element of array: 1
Type of npArray: <class 'numpy.ndarray'>
Shape of npArray: ()
IndexError: too many indices for array
Numpy может создавать ndarrays из различных python коллекций, а результат myClass.Test () индексируется, имеет длину, но не узнаваемый как массив. Копировать результат myClass.Test () в массив numpy по одному нельзя, так как он содержит около 25 000 000 элементов.