随机选取常量索引

2024-10-03 15:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有任何方法可以随机选取常数间隔的numpy数组的索引。你知道吗

例如, 我有一个形状(1150)为5*30个元素的数组。我想为每30个元素随机选取x个索引,其中x<;=30。所以,我将从数组中随机选取x*5个索引。你知道吗

首先,我尝试了np.chocie,但是我不能使用np.choice,因为它看起来不是常量间隔。你知道吗

我可以对每个元素进行循环迭代,但我觉得这不是有效的方法。你知道吗

在努比有什么办法吗?你知道吗

我试过了,得到了要求的结果。但我想改进代码

frames_picker = np.zeros(30*5)
samples=[]
for i in range(5):
    sample = (np.random.choice(frames_picker[0: 30].shape[0], 5, replace=False))+(i*30)
    samples.append(sample)
samples=np.array(samples)
frames_picker[np.sort(samples)]=1

Tags: sample方法ltnumpy元素frames间隔np
2条回答
>>> np.random.choice(30, size=(5,5), replace=False) + np.arange(0, 150, 30)[:,None]

array([[ 18,  28,  13,   6,   8],
       [ 40,  56,  44,  57,  32],
       [ 83,  71,  65,  81,  64],
       [114, 115,  97,  90, 106],
       [137, 121, 129, 142, 149]])

然后可以将它们展平并排序。这将从每个间隔[0,29],[30,59],…,[120,149]中提供5个随机索引。你知道吗

可以将一维数组转换为更合适的二维矩阵,然后应用采样。例如:

data = np.array(...) # 1D array with 5*30 elements
m = np.asmatrix(np.split(data, 5))  # chunk and convert to a matrix
sample = m[np.random.randint(m.shape[0], size=30), :]  # get random 30 slices from the matrix
np.ravel(sample)  # convert back to 1D array

相关问题 更多 >