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

在C#中使用PythonNet调用Numpy Reshape遇错误求助

解决PythonNet调用Numpy reshape的错误

错误原因

问题出在newshape:(2, 2)的参数传递上:C#的ValueTuple类型无法被PythonNet自动转换为Numpy要求的Python序列类型(元组/列表),导致Numpy无法识别newshape参数的格式,抛出expected sequence object with len >=0 or a single integer错误。

解决方案

需要将C#中的形状参数显式转换为Python的元组类型,有两种常用方式:

方式1:使用PyTuple构造形状参数

修改reshape调用的代码,用PyTuple创建符合要求的Python元组:

using System.Numerics;
using Python.Runtime;

static void Initialize()
{
    string pythonDll = @"C:\Users\Mohsen\AppData\Local\Programs\Python\Python39\python39.dll";
    Environment.SetEnvironmentVariable("PYTHONNET_PYDLL", pythonDll);
    PythonEngine.Initialize();    
}

Initialize();
Complex[] complexes = [
new Complex(1.0, 2.0),
new Complex(3.0, 4.0),
new Complex(5.0, 6.0),
new Complex(5.0, 6.0)
];
List<Complex> comlist = new List<Complex>(complexes);

using (Py.GIL())
{
    dynamic np = Py.Import("numpy");
    dynamic rawData = np.array(comlist);
    // 显式创建Python元组作为newshape参数
    var targetShape = new PyTuple(2, 2);
    dynamic reshapedArray = np.reshape(a: rawData.T, newshape: targetShape, order: 'F');
}

方式2:直接调用数组对象的reshape方法

更简洁的方式是直接调用Numpy数组实例的reshape方法,同样传递PyTuple类型的形状参数:

using (Py.GIL())
{
    dynamic np = Py.Import("numpy");
    dynamic rawData = np.array(comlist);
    // 直接调用数组的reshape方法
    dynamic reshapedArray = rawData.T.reshape(new PyTuple(2, 2), order: 'F');
}

额外说明

  • 无论使用复数数组还是整数数组,只要参数类型转换正确,reshape操作都能正常执行。
  • 确保PythonNet版本与你的Python(3.9)和Numpy版本兼容,避免因版本不匹配导致的隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:59:52