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

如何对ONNXRuntime中的Tensor执行切片操作?

C# OnnxRuntime Tensor 维度切片实现方案

方案1:内置Slice方法(全版本兼容)

Microsoft.ML.OnnxRuntime.Tensors.Tensor<T>原生提供切片方法,无需手动循环拷贝:

var start_idx = bidx * batch_size;
// 生成切片视图(零拷贝,修改切片会同步修改原张量)
// 对应Python语法 inputs[start_idx:start_idx+batch_size, :, :]
var subsetView = inputs.Slice(
    starts: new[] { start_idx, 0, 0 }, 
    lengths: new[] { batch_size, inputs.Dimensions[1], inputs.Dimensions[2] });

// 若需要和原张量独立的副本,调用ToDenseTensor即可
var subsetCopy = subsetView.ToDenseTensor();

如果你的实际逻辑和示例循环一致,仅需要第三个维度的索引0位置,将lengths的第三个参数改为1即可。

方案2:范围运算符语法(C# 8+ + OnnxRuntime v1.12.0+ 支持)

高版本库支持类Python的范围语法,代码更简洁:

var start_idx = bidx * batch_size;
var subset = inputs[start_idx..(start_idx + batch_size), .., ..].ToDenseTensor();

性能说明

内置Slice方法经过底层优化,不管是生成视图还是拷贝副本,性能都远高于手动双重循环实现,适合大张量场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:39:01