gpt4 book ai didi

python - 一次替换张量中的多个值的推荐方法?

转载 作者:行者123 更新时间:2023-12-05 05:02:26 26 4
gpt4 key购买 nike

是否有一种批处理方法可以在没有 for 循环的情况下一次替换 pytorch 张量中的多个特定值?

例子:

old_values = torch.Tensor([1, 2, 3, 4, 5, 5, 2, 3, 3, 2])
old_new_value = [[2,22], [3,33], [6, 66]]

old_new_value = [[2,22], [3,33], [6, 66]],意思是2应该换成22,3应该换成33和6到 66

我能否有一种有效的方法来实现以下 end_result?

end_result = torch.Tensor([1, 22, 33, 4, 5, 5, 22, 33, 33, 22])

请注意,old_values 不是唯一的。另外,old_new_value 可能有一对 old_values 中不存在的 here(6, 66)。此外,old_new_values 包含唯一行,

最佳答案

如果您的输入张量中没有任何重复元素,这是使用掩码 和使用基本索引 赋值的一种直接方法。 (我假设输入张量的数据类型是 int。但是,您可以直接将此代码改编为其他 dtype)。下面是一个可重现的插图,解释散布在行内注释中。

# input tensors to work with
In [75]: old_values
Out[75]: tensor([1, 2, 3, 4, 5], dtype=torch.int32)

In [77]: old_new_value
Out[77]:
tensor([[ 2, 22],
[ 3, 33]], dtype=torch.int32)

# generate a boolean mask using the values that need to be replaced (i.e. 2 & 3)
In [78]: boolean_mask = (old_values == old_new_value[:, :1]).sum(dim=0).bool()

In [79]: boolean_mask
Out[79]: tensor([False, True, True, False, False])

# assign the new values by basic indexing
In [80]: old_values[boolean_mask] = old_new_value[:, 1:].squeeze()

# sanity check!
In [81]: old_values
Out[81]: tensor([ 1, 22, 33, 4, 5], dtype=torch.int32)

关于效率的小提示:在整个过程中,我们从未制作任何数据副本(即我们仅通过根据我们的需求)。因此,运行时间将非常快。

关于python - 一次替换张量中的多个值的推荐方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62185188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com