Python Pytork中的张量有类似的df.mask函数吗?

Python Pytork中的张量有类似的df.mask函数吗?,python,tensorflow,pytorch,tensor,Python,Tensorflow,Pytorch,Tensor,我想用-5替换二维张量中的所有0 使用dataframe,我可以轻松做到这一点: df = df.mask(df=0, -5) 但这不适用于张量。我试过: y = torch.where(y = 0, -5, y) 很简单,就用这个 y[y==0]=-5很简单,只要使用这个 y[y==0]=-5通常有两种方法 上面由prhmma给出的一种方法是使用原位突变,如y[y==0]=-5。它很好,效率很高,但将中断自动加载操作。所以若你们想让梯度通过y,你们不应该这样做 另一种方法是使用火炬。

我想用-5替换二维张量中的所有0

使用dataframe,我可以轻松做到这一点:

df = df.mask(df=0, -5) 
但这不适用于张量。我试过:

 y = torch.where(y = 0, -5, y) 

很简单,就用这个


y[y==0]=-5

很简单,只要使用这个


y[y==0]=-5

通常有两种方法

上面由
prhmma
给出的一种方法是使用原位突变,如
y[y==0]=-5
。它很好,效率很高,但将中断自动加载操作。所以若你们想让梯度通过y,你们不应该这样做

另一种方法是使用
火炬。其中
,正如您所尝试的那样。正确的咒语是

y = torch.where(y == 0, torch.tensor(-5), y)
或者,如果您想成为设备和数据类型不可知论者

five = torch.tensor(-5, dtype=y.dtype, device=y.device)
y = torch.where(y == 0, five, y)

where
不接受标量的事实是一个令人讨厌的剪纸,但事实就是如此。请注意,虽然选择本身是离散的,显然不可微的,但此操作将使渐变流过两个操作数。

有两种通用方法

上面由
prhmma
给出的一种方法是使用原位突变,如
y[y==0]=-5
。它很好,效率很高,但将中断自动加载操作。所以若你们想让梯度通过y,你们不应该这样做

另一种方法是使用
火炬。其中
,正如您所尝试的那样。正确的咒语是

y = torch.where(y == 0, torch.tensor(-5), y)
或者,如果您想成为设备和数据类型不可知论者

five = torch.tensor(-5, dtype=y.dtype, device=y.device)
y = torch.where(y == 0, five, y)

where
不接受标量的事实是一个令人讨厌的剪纸,但事实就是如此。请注意,虽然选择本身是离散的,显然不可微的,但此操作将使渐变流过两个操作数。

它不是一个特殊的函数,只是python函数standards@LinmeiShang一般来说,许多numpy技巧(与索引相关)也适用于Pytork,只是蟒蛇standards@LinmeiShang一般来说,许多numpy技巧(与索引相关)也适用于pytorch。无论分段函数
y=-5如何,如果x==0,否则x
在0处不可微,它甚至不是连续的。因此,有效的backprop是不可能的。上面的评论只是为了强调一个重要的事实,您已经提到了@LinmeiShang计划使用它进行优化。无论分段函数
y=-5如果x==0,那么x
在0处是不可微的,它甚至不是连续的。因此,有效的backprop是不可能的。上面的评论只是为了强调这一重要事实,您已经在case@LinmeiShang计划将其用于优化目的时提到了这一点。