如何实现torch.arange的tensor版本

文章目录

背景

python 复制代码
import torch

我们都知道,torch.arange只支持数字,不支持tensor,如下:

python 复制代码
torch.arange(0,5,1)

tensor([0, 1, 2, 3, 4])

但是如果使用tensor,就会报错:

python 复制代码
torch.arange(torch.tensor([0]),torch.tensor([5]),torch.tensor([1]))

可问题是,我们有如下场景怎么办:

python 复制代码
torch.arange(torch.tensor([0,2]),torch.tensor([5,7]),torch.tensor([1,1]))

也就是说,我们希望

python 复制代码
torch.arange(0,5,1)和torch.arange(2,7,1)

并行做,难道就不行吗?

实现方案

上面这种并行是可以做到的,如下:

python 复制代码
x=torch.arange(0,5,1).reshape(1,-1)
a=torch.tensor([0,2])
a=a.reshape(-1,1)
x=a+x
x

tensor([[0, 1, 2, 3, 4],

[2, 3, 4, 5, 6]])

不可行的情况

细心的人可以发现,上面是具有特殊性的,

python 复制代码
torch.arange(torch.tensor([0,2]),torch.tensor([5,7]),torch.tensor([1,1]))

python 复制代码
torch.tensor([0,2])+5=torch.tensor([5,7])

且步长是一样的:

python 复制代码
torch.tensor([1,1])#步长都是1

为什么必须这样呢?因为这样才可以保证,输出的结果的维度是一样的。比如你换一个:

python 复制代码
torch.arange(torch.tensor([0,2]),torch.tensor([5,7]),torch.tensor([1,2]))

步长一个是1,一个是2,这样肯定不行,两个arange输出的维度不同,就肯定不可能并行。再比如:

python 复制代码
torch.arange(torch.tensor([0,2]),torch.tensor([5,9]),torch.tensor([1,1]))

步长是一样了,但是5-0=5,9-2=7(end-start),最终arange输出的维度还是会不同,无法并行。

相关推荐
会飞的Anthony几秒前
基于Python的自然语言处理系列(14):TorchText + biGRU + Attention + Teacher Forcing
人工智能·自然语言处理
jun7788953 分钟前
机器学习-监督学习:朴素贝叶斯分类器
人工智能·学习·机器学习
FL16238631294 分钟前
基于yolov5的混凝土缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
人工智能·python·yolo
Kenneth風车8 分钟前
【第十三章:Sentosa_DSML社区版-机器学习聚类】
人工智能·低代码·机器学习·数据分析·聚类
jndingxin15 分钟前
OpenCV运动分析和目标跟踪(4)创建汉宁窗函数createHanningWindow()的使用
人工智能·opencv·目标跟踪
立黄昏粥可温16 分钟前
Python 从入门到实战22(类的定义、使用)
开发语言·python
机器之心17 分钟前
o1 带火的 CoT 到底行不行?新论文引发了论战
android·人工智能
机器之心23 分钟前
从架构、工艺到能效表现,全面了解 LLM 硬件加速,这篇综述就够了
android·人工智能
今天也要加油丫1 小时前
`re.compile(r“(<.*?>)“)` 如何有效地从给定字符串中提取出所有符合 `<...>` 格式的引用
python