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

如何将cppyy返回的C++容器对象转换为Python对象?

将cppyy封装的std::tuple与嵌套std::vector转为Python对象

核心转换逻辑

cppyy对C++标准容器的封装对象天然支持Python迭代协议,直接用原生Python构造器或推导式就能完成转换:

  1. 单个二维std::vector转Python列表
    针对cppyy返回的std::vector<std::vector<double>>,用嵌套列表推导式直接转换:

    # cpp_2d_vec 是cppyy封装的二维double向量
    py_2d_list = [list(row) for row in cpp_2d_vec]
    
  2. std::tuple转原生Python元组
    cppyy的std::tuple可以直接用tuple()构造器转为Python原生元组,再逐个处理内部的向量:

    # cpp_tuple 是cppyy调用C++方法得到的元组对象
    py_tuple = tuple(cpp_tuple)
    

完整转换示例

假设你的C++方法返回std::tuple<std::vector<std::vector<double>>, std::vector<std::vector<double>>>,调用后得到cpp_result,完整转换适配PyTorch的流程如下:

import torch
import numpy as np

# 1. 把cppyy元组转为Python原生元组
py_tuple = tuple(cpp_result)

# 2. 批量转换所有二维向量为Python列表
converted = []
for vec in py_tuple:
    converted.append([list(row) for row in vec])

# 3. 转为PyTorch张量(两种可选方式)
# 方式1:从Python列表直接转张量
tensor1 = torch.tensor(converted[0])
tensor2 = torch.tensor(converted[1])

# 方式2:先转numpy数组再转张量(适合大数据量场景)
np_arr1 = np.array(converted[0])
tensor1 = torch.from_numpy(np_arr1)

注意事项

  • 无需额外依赖库,cppyy的容器封装原生支持Python迭代,直接用原生构造器即可完成转换。
  • 若追求内存效率,直接用np.array()处理cppyy的二维向量也可行,但转成Python列表后再转numpy/张量,兼容性更强,能避免cppyy内存管理带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:55:35