Преобразуйте System.Int32 [] из python nnet .netstandard в numpy массив в python скрипте - PullRequest
0 голосов
/ 19 марта 2020

Я использую пакет 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 элементов.

1 Ответ

0 голосов
/ 07 апреля 2020

Использование:

npArray = np.fromiter(array, int)

у меня сработало.

...