记录一段相同功能,速度差异天壤之别的小段代码:
我写的,运行速度:乌龟界的扛把子!!!
zero = torch.zeros_like (d)
d_nonoise = torch.zeros_like (d)
for i in range (zero.shape[0]):
for j in range (zero.shape[1]):
d_nonoise[i][j] = torch.where (d[i][j] < (d[i][j].mean () + 3 * d[i][j].std ()), d[i][j], zero[i][j])
d_nonoise[i][j] = torch.where (d[i][j] > (d[i][j].mean () - 3 * d[i][j].std ()), d[i][j], zero[i][j])
return d
请教后的代码:兔子中的扛把子!
d_mean = d.view (d.shape[0], d.shape[1], -1).mean (dim=-1, keepdim=True).unsqueeze (dim=-1).repeat (1, 1,d.shape[2],d.shape[3])
d_std = d.view (d.shape[0], d.shape[1], -1).std (dim=-1, keepdim=True).unsqueeze (dim=-1).repeat (1, 1,d.shape[2],d.shape[3])
zero = torch.zeros (size=(1,), device=d.device, dtype=d.dtype)
d_nonoise = torch.where ((d < (d_mean + 3 * d_std)) & (d > (d_mean - 3 * d_std)), d, zero)
d = d_nonoise
return d