关键词:
【中文标题】如何将 pytorch 整数张量转换为布尔张量?【英文标题】:How to convert a pytorch tensor of ints to a tensor of booleans? 【发布时间】:2019-05-02 21:32:15 【问题描述】:我想将整数张量转换为布尔张量。
具体来说,我希望能够拥有一个将tensor([0,10,0,16])
转换为tensor([0,1,0,1])
的函数
这在 Tensorflow 中很简单,只需使用 tf.cast(x,tf.bool)
。
我希望强制转换将所有大于 0 的整数更改为 1,并将所有等于 0 的整数更改为 0。这相当于大多数语言中的 !!
。
由于 pytorch 似乎没有专用的布尔类型可以转换,所以这里最好的方法是什么?
编辑:我正在寻找一种矢量化解决方案,而不是循环遍历每个元素。
【问题讨论】:
在每个元素上调用bool(int)
。或者在 numpy 中:使用 array.astype(...)
这是需要for循环的简单解决方案,是的。但是有矢量化的解决方案吗?
astype
版本几乎肯定是矢量化的。
@ThomasLang 在 pytorch 中没有 .astype
,所以必须要 convert to numpy-> cast -> load to pytorch
哪个 IMO 效率低下
【参考方案1】:
您可以使用如下所示的比较:
>>> a = tensor([0,10,0,16])
>>> result = (a == 0)
>>> result
tensor([ True, False, True, False])
【讨论】:
【参考方案2】:您正在寻找的是为给定的整数张量生成一个布尔掩码。为此,您可以使用简单的比较运算符 (>
) 或使用 torch.gt()
来简单地检查条件:“张量中的值是否大于 0”,这将为我们提供所需的结果。
# input tensor
In [76]: t
Out[76]: tensor([ 0, 10, 0, 16])
# generate the needed boolean mask
In [78]: t > 0
Out[78]: tensor([0, 1, 0, 1], dtype=torch.uint8)
# sanity check
In [93]: mask = t > 0
In [94]: mask.type()
Out[94]: 'torch.ByteTensor'
注意:在 PyTorch 1.4+ 版本中,上述操作会返回'torch.BoolTensor'
In [9]: t > 0
Out[9]: tensor([False, True, False, True])
# alternatively, use `torch.gt()` API
In [11]: torch.gt(t, 0)
Out[11]: tensor([False, True, False, True])
如果您确实想要单个位(0
s 或 1
s),请使用:
In [14]: (t > 0).type(torch.uint8)
Out[14]: tensor([0, 1, 0, 1], dtype=torch.uint8)
# alternatively, use `torch.gt()` API
In [15]: torch.gt(t, 0).int()
Out[15]: tensor([0, 1, 0, 1], dtype=torch.int32)
此功能请求问题中讨论了此更改的原因:issues/4764 - Introduce torch.BoolTensor ...
TL;DR:简单的一个班轮
t.bool().int()
【讨论】:
这会在 PyTorch 1.4.0 中返回“torch.BoolTensor”。【参考方案3】:将布尔值转换为数值:
a = torch.tensor([0,4,0,0,5,0.12,0.34,0,0]) print(a.gt(0)) # output in boolean dtype # output: tensor([False, True, False, False, True, True, True, False, False]) print(a.gt(0).to(torch.float32)) # output in float32 dtype # output: tensor([0., 1., 0., 0., 1., 1., 1., 0., 0.])
【讨论】:
【参考方案4】:另一种选择是简单地做:
temp = torch.tensor([0,10,0,16])
temp.bool()
#Returns
tensor([False, True, False, True])
【讨论】:
【参考方案5】:PyTorch 的to(dtype)
方法有方便的data-type named aliases。您可以直接拨打bool
:
>>> t.bool()
tensor([False, True, False, True])
>>> t.bool().int()
tensor([0, 1, 0, 1], dtype=torch.int32)
【讨论】:
将 PyTorch 张量转换为 python 列表
】将PyTorch张量转换为python列表【英文标题】:ConvertPyTorchtensortopythonlist【发布时间】:2019-05-2300:33:30【问题描述】:如何将PyTorchTensor转换为python列表?我当前的用例是将大小为[1,2048,1,1]的张量转换为2048个元素的列表。我的张量... 查看详情
如何将字符串列表转换为pytorch中的张量?
】如何将字符串列表转换为pytorch中的张量?【英文标题】:Howtoconvertalistofstringsintoatensorinpytorch?【发布时间】:2017-11-2022:05:50【问题描述】:我正在研究分类问题,其中我有一个字符串列表作为类标签,我想将它们转换为张量。... 查看详情
将 Pandas 数据帧转换为 PyTorch 张量?
】将Pandas数据帧转换为PyTorch张量?【英文标题】:ConvertPandasdataframetoPyTorchtensor?【发布时间】:2018-10-2218:41:54【问题描述】:我想用PyTorch在pandas数据帧df上训练一个简单的神经网络。其中一列名为"Target",它是网络的目标... 查看详情
将 pytorch 张量保存为 32 位灰度图像
】将pytorch张量保存为32位灰度图像【英文标题】:Savingapytochtensorasa32-bitgrayscaleImage【发布时间】:2021-06-2921:34:21【问题描述】:我处理了一个32位灰度.tif图像,我使用PIL将其转换为张量。在此之后,我将其保存为:torchvision.utils.... 查看详情
PyTorch:如何将张量的形状作为 int 列表获取
】PyTorch:如何将张量的形状作为int列表获取【英文标题】:PyTorch:HowtogettheshapeofaTensorasalistofint【发布时间】:2018-03-3106:35:20【问题描述】:在numpy中,V.shape给出了一个维数为V的整数元组。在tensorflow中V.get_shape().as_list()给出了V维... 查看详情
如何将张量列表转换为 Torch::Tensor?
...btorch:tfm=np.float32([[A[0,0],A[1,0],A[2,0]],[A[0,1],A[1,1],A[2,1]]])在Pytorch中,我们可以简单 查看详情
在 PyTorch 中将 5D 张量转换为 4D 张量
】在PyTorch中将5D张量转换为4D张量【英文标题】:Convert5Dtensorto4DtensorinPyTorch【发布时间】:2020-12-2712:19:31【问题描述】:在PyTorch中,我有一个尺寸为Bx9xCxHxW的5D张量X。我想将其转换为尺寸为Bx9CxHxW的4D张量Y,以便以通道方式进行... 查看详情
如何将张量逐行乘以 PyTorch 中的向量?
】如何将张量逐行乘以PyTorch中的向量?【英文标题】:Howtomultiplyatensorrow-wisebyavectorinPyTorch?【发布时间】:2019-05-2800:18:48【问题描述】:当我有一个形状为[12,10]的张量m和一个形状为[12]的标量向量s时,如何将m的每一行与s中的相... 查看详情
Pytorch张量,如何切换通道位置 - 运行时错误
】Pytorch张量,如何切换通道位置-运行时错误【英文标题】:Pytorchtensor,howtoswitchchannelposition-Runtimeerror【发布时间】:2020-04-2603:14:20【问题描述】:我的训练数据集如下,其中X_train是具有3个通道的3DX_Train的形状:(708,256,3)Y_Train的... 查看详情
Torch JIT Trace = TracerWarning:将张量转换为 Python 布尔值可能会导致跟踪不正确
】TorchJITTrace=TracerWarning:将张量转换为Python布尔值可能会导致跟踪不正确【英文标题】:TorchJITTrace=TracerWarning:ConvertingatensortoaPythonbooleanmightcausethetracetobeincorrect【发布时间】:2021-06-1902:42:54【问题描述】:我正在关注本教程:http... 查看详情
Pytorch 张量到 numpy 数组
】Pytorch张量到numpy数组【英文标题】:Pytorchtensortonumpyarray【发布时间】:2018-09-2022:32:48【问题描述】:我有一个pytorch张量,大小为torch.Size([4,3,966,1296])我想使用以下代码将其转换为numpy数组:imgs=imgs.numpy()[:,::-1,:,:]谁能解释一下... 查看详情
Pytorch 展开和折叠:如何将这个图像张量重新组合在一起?
】Pytorch展开和折叠:如何将这个图像张量重新组合在一起?【英文标题】:PytorchUnfoldandFold:HowdoIputthisimagetensorbacktogetheragain?【发布时间】:2021-01-1021:08:00【问题描述】:我正在尝试使用展开过滤大小为256x256的单通道2D图像,以... 查看详情
使用 grad 将 PyTorch 张量调整为更小的尺寸
】使用grad将PyTorch张量调整为更小的尺寸【英文标题】:ResizingPyTorchtensorwithgradtosmallersize【发布时间】:2020-06-2502:51:20【问题描述】:我正在尝试将张量从(3,3)缩小到(1,1),但我想保留原始张量:importtorcha=torch.rand(3,3)a_copy=a.clone()a... 查看详情
如何将张量转换为 ndarray(内部带有对抗图像的张量)
】如何将张量转换为ndarray(内部带有对抗图像的张量)【英文标题】:HowtoconvertTensortondarray(tensorwithadversarialimagesinside)【发布时间】:2019-02-2520:47:51【问题描述】:注意:我已经尝试了不同SO问题的解决方案,但均未成功,详情... 查看详情
具有多个值的张量的布尔值在 Pytorch 中不明确
】具有多个值的张量的布尔值在Pytorch中不明确【英文标题】:BoolvalueofTensorwithmorethanonevalueisambiguousinPytorch【发布时间】:2019-03-2713:35:00【问题描述】:我想在pytorch中创建一个模型,但我做不到计算损失。它总是返回Tensor的布尔... 查看详情
如何调整 PyTorch 张量的大小?
】如何调整PyTorch张量的大小?【英文标题】:HowtoresizeaPyTorchtensor?【发布时间】:2020-02-2818:45:17【问题描述】:我有一个大小为(5,1,44,44)(批次、通道、高度、宽度)的PyTorch张量,我想将其“调整大小”为(5,1,224,224)我该怎么做... 查看详情
使用 str 键和 pytorch 张量列表将字典保存为值
】使用str键和pytorch张量列表将字典保存为值【英文标题】:Savingthedictionarywithstrkeysandalistofpytorchtensorsasvalues【发布时间】:2020-11-1505:44:18【问题描述】:我想保存一个字典列表,其中键是查询的索引(因此字典的键是字符串)。... 查看详情
如何在 PyTorch 中将 RGB 图像编码为 n_class One 热张量
】如何在PyTorch中将RGB图像编码为n_classOne热张量【英文标题】:HowtoencodeaRGBImagetoann_classOneHotTensorinPyTorch【发布时间】:2019-11-2807:24:52【问题描述】:所以,我正在做一个分割任务,我需要做的是将一个RGB图像转换为一个n通道一... 查看详情