我想从一个数组中随机选择,但是要求输出数组的元素将增加1(从零开始)。例如,如果我想得到5个介于0和5之间的数字,那么就可以了
np.random.choice(np.arange(6), 5)
array([5, 0, 5, 2, 5])
在这种情况下,我希望这是:
^{pr2}$另一个例子,如果
np.random.choice(np.arange(6), 5)
array([1, 1, 1, 4, 2])
我正试图以这样一种方式“还原”这一切
array([0, 0, 0, 2, 1])
最后一个例子…选择15个0到5之间的数字
np.random.choice(np.arange(6), 15)
array([4, 5, 3, 0, 4, 5, 3, 0, 2, 5, 2, 3, 2, 4, 4])
我最终想去的地方
array([3, 4, 2, 0, 3, 4, 2, 0, 1, 4, 1, 2, 1, 3, 3])
如果原始序列只包含唯一元素,那么像
np.unique
这样的基于排序的方法在O(n logn)上实际上有点浪费,因为有O(n)解决方案可用(假设n>;=k,其中k是要选择的集的大小):你可以从一个随机选择的数组开始
然后收集唯一值并对其进行排序
^{pr2}$然后将原始值映射到
v
中的索引:您要做的是将原始数组}的唯一元素是}用{},每个{}替换为{}。在
x
中的每个条目替换为x
的唯一元素数组中的索引(按排序顺序)。例如,如果x
是np.array([7, 6, 2, 7, 7, 2])
,那么{[2, 6, 7]
,我们希望用它在唯一元素数组中的位置来替换每个数字:也就是说,将每个2
替换为0
,每个{^{} 函数同时完成这两项工作:它为您查找(排序)的唯一元素数组,如果您传递
return_inverse=True
,np.unique
也会给您第二个返回值,该值正好包含您要查找的索引。因此,您只需使用return_inverse=True
调用np.unique
,丢弃第一个返回值,保留第二个返回值。示例:相关问题 更多 >
编程相关推荐