Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PyTorch中的张量的每一行中随机设置固定数量的元素_Pytorch - Fatal编程技术网

如何在PyTorch中的张量的每一行中随机设置固定数量的元素

如何在PyTorch中的张量的每一行中随机设置固定数量的元素,pytorch,Pytorch,我想知道下面的代码是否有更有效的替代方案,而不使用第4行中的“for”循环 import torch n, d = 37700, 7842 k = 4 sample = torch.cat([torch.randperm(d)[:k] for _ in range(n)]).view(n, k) mask = torch.zeros(n, d, dtype=torch.bool) mask.scatter_(dim=1, index=sample, value=True) 基本上,我要做的是通

我想知道下面的代码是否有更有效的替代方案,而不使用第4行中的“for”循环

import torch
n, d = 37700, 7842
k = 4
sample = torch.cat([torch.randperm(d)[:k] for _ in range(n)]).view(n, k)
mask = torch.zeros(n, d, dtype=torch.bool)
mask.scatter_(dim=1, index=sample, value=True)

基本上,我要做的是通过
d
掩码张量创建一个
n
,这样在每一行中
k
随机元素都是真的。

这里有一种方法可以做到这一点,没有循环。让我们从一个随机矩阵开始,其中所有元素都是在[0,1]上均匀绘制的iid。然后我们取每行的第k个分位数,并在每行上将所有较小或相等的元素设置为True,其余元素设置为False:

rand_mat = torch.rand(n, d)
k_th_quant = torch.topk(rand_mat, k, largest = False)[0][:,-1:]
mask = rand_mat <= k_th_quant
rand\u mat=torch.rand(n,d)
k_th_quant=torch.topk(rand_mat,k,max=False)[0][:,-1:]

mask=rand_mat很好的回答,但是,我认为我应该向您提供我在代码中实际使用的
n
d
k
的真实值(我编辑了问题)。使用
n=37700
d=7842
k=4
,我自己的代码在我的CPU上运行大约5s,而你的代码在我的CPU上运行大约18s。谢谢,所以我已经对其进行了更新,现在,对于新的n、d和k值,它运行得更好更快。我的需要2.44秒,而你的需要5.27秒。