【问题标题】:Converting Python.Runtime.PyObject (Pythonnet) to C# native data types - it works for double but not for numpy.array将 Python.Runtime.PyObject (Pythonnet) 转换为 C# 本机数据类型 - 它适用于 double 但不适用于 numpy.array
【发布时间】:2023-02-26 22:41:44
【问题描述】:

假设我将使用 Pythonnet 从 C# 调用 python 3.0 脚本。只要 return 是 double 类型,它就非常简单:

var input1 = new double[] {15, 20, 25};
dynamic test = Py.Import("Py_file_name");
double r1 = test.function_name(input1);

function_name() 方法返回的值被转换为双精度值,我可以根据需要使用它。但是对于更复杂的代码,事情就不同了,假设 retunnumpy.array

double [] r1 = test.function_name(input1);

失败并出现错误 Cannot implicitly convert type 'Python.Runtime.PyObject' to 'double []'。 我可以像这样获得对象的价值:

object r1 = test.ANN1_fun(input1);

但这并没有解决任何问题,因为我仍然有 object {Python.Runtime.PyObject} 类型的变量,我不能(我不知道如何)在我的 C# 项目中使用它。如何将此 numpy.array 转换为任何 C# 数组?

【问题讨论】:

    标签: python c# python-3.x numpy python.net


    【解决方案1】:

    它更像是解决方法而不是解决方案,但我会把它留在这里,以防将来有人处理类似的问题。似乎 Pythonnet 只无缝处理基本数据类型。所以你必须在 python 站点上将 numpy 数组转换为更简单的东西,比如列表,所以假设 y1 是numpy array

    y1=y1.flatten('C') #Only if required by dimensions
    y1= [arr.tolist() for arr in y1] #Converting to list
    return y1
    

    现在您可以在 C# 中捕获您的值

    double [] r1 = test.function_name(input1);
    

    它将正确转换为 C# 数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多