我有一个3d张量,并希望确保所有值都在给定范围内(在这种情况下为0-1)。为了做到这一点,我已经编写了以下代码:
An example in this is say that I have a `2-3-3` array with the values
[1, 2, 0.5][0.5,0.2,-0.2]
[0.1,0.2,0.3][1, 1, 1 ]
[-2, -1, 2 ][0.2,-5,-1 ]
then I expect an outcome of
[1, 1, 0.5][0.5,0.2,0]
[0.1,0.2,0.3][1, 1, 1 ]
[0, 0, 1 ] [0.2,0,-1 ]
并且它有效,只有一个问题:性能很糟糕,我知道必须有一些更好的方法来执行此操作然后循环整个数组,因为大多数张量操作不涉及手动循环数组要快得多。有人知道如何加快速度吗?
{{1}}
将0的下限下的每个值替换为0,将上限1的每个值替换为1。
有人知道如何快速完成这项工作吗?
答案 0 :(得分:1)
我从未使用过Torch,但它的文档说: http://torch7.readthedocs.io/en/rtd/maths/#torch.clamp
[res] torch.clamp([res,] tensor1,min_value,max_value)
将张量中的所有元素夹在[min_value, MAX_VALUE。即:
y_i = x_i, if x_i >= min_value or x_i <= max_value = min_value, if x_i < min_value = max_value, if x_i > max_value
z=torch.clamp(x,0,1)
将返回一个结果为x的新张量 界限在0到1之间。
torch.clamp(z,x,0,1)
会将结果放入z。
x:clamp(0,1)
将执行钳位操作(放置 结果是x)。
z:clamp(x,0,1)
会将结果放入z。
我想这就是你要找的东西?