You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pythonnet中numpy.array转C#数组:解决PyObject转换难题

Pythonnet中Numpy数组转C#数组的解决方法

当使用Pythonnet从C#调用Python脚本时,若Python函数返回numpy.array类型,无法直接转换为C#的double[]数组,会抛出类型转换错误。以下是两种可行的解决方式:

方式一:在C#侧直接转换Numpy数组(无需修改Python代码)

通过Pythonnet提供的Numpy类型映射,先将返回的PyObject转为numpy.ndarray,再提取数据转换为C#数组:

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

// 验证是否为Numpy数组并转换
using (var numpy = Py.Import("numpy"))
{
    if (numpy.ndarray.Check(resultObj))
    {
        var npArray = new Python.Runtime.Numpy.NDArray(resultObj);
        // 转换为一维double数组(若为多维数组需调整处理逻辑)
        double[] csharpArray = npArray.As<double[]>();
        
        // 后续可直接使用csharpArray
    }
}

注意:使用此方法前需确保Python环境已安装numpy,且C#项目中正确引用Python.Runtime包,同时配置好Pythonnet的运行环境(如设置Python路径、初始化PythonEngine)。

方式二:在Python侧转换为列表后返回(简单高效)

修改Python函数,将numpy.array转为普通列表再返回,C#侧可直接转换为数组:

Python脚本(Py_file_name.py):

import numpy as np

def function_name(input_arr):
    # 原逻辑生成numpy数组
    np_result = np.array(input_arr) * 1.5
    # 转换为Python列表返回
    return np_result.tolist()

C#代码:

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

这种方式无需处理Numpy的类型映射,代码更简洁,适合对性能要求不极致的场景。

内容的提问来源于stack exchange,提问作者Karls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:57:44