我需要从2个数组中选择n项,使索引相同。所以,例如,我需要从x中随机选择两个项目,并从y中选择元素,使得y的选择索引与x的相同:
x = np.asarray([0.1123,0.223,0.8873])
y = np.asarray([1,1,2])
x_chosen = np.random.choice(x,(2,))
说x_chosen
结束:x_chosen = [0.1123,0.223]...
然后我需要:
y_chosen = [1,1]
我目前有一个解决方法......但是我想要一个基本的numpy或scipy函数而不是我自己的函数,基本上只有3行,以保持我的函数在这个项目的范围内......我宁愿我的主要代码中没有这个一次性变量创建:
x_index = np.asarray([i for i in range(len(x))])
x_chosen_indices = np.random.choice(x_index,(2,))
x_chosen = x[x_chosen_indices]
y_chosen = y[x_chosen_indices]
或者,我可以堆叠,选择和拆分...但我想这仍然让我有一个一次性的功能,我必须坚持某处...或4-5行代码,这是没有意义的...
答案 0 :(得分:2)
首先选择指数如何:
import numpy as np
choice = np.random.choice(np.array(range(len(x))), 2)
然后根据他们选择:
x_chosen, y_chosen = x[choice], y[choice]
答案 1 :(得分:2)
使用np.random.randint()
查找索引:
x = np.asarray([0.1123,0.223,0.8873])
y = np.asarray([1,1,2])
indices = np.random.randint(0, x.size, 2)
>>> x[indices]
array([ 0.1123, 0.223 ])
>>> y[indices]
array([1, 1])
修改强>
正如B. M的评论所述,使用np.random.choice(.., replace=False)
避免多次使用相同的索引:
indices = np.random.choice(x.size, 2, replace=False)
答案 2 :(得分:1)
您可以使用numpy.random.permutation
创建一个混洗的索引数组。然后,您可以根据需要选择任意数量的随机选择的公共元素:
import numpy as np
x = np.asarray([0.1123,0.223,0.8873])
y = np.asarray([1,1,2])
indices= np.random.permutation(np.size(x, 0))
x_chosen = x[indices[:2]]
y_chosen = y[indices[:2]]
print(x_chosen)
>>>[ 0.8873 0.1123]
print(y_chosen)
>>>[2 1]
答案 3 :(得分:1)
我认为以下两种方法可行。第一种方法与上面的方法相同,但它确实摆脱了一行:
index = np.random.choice(np.arange(len(x)), 2, replace=False)
x_chosen = x[index]
y_chosen = y[index]
In [15]: x_chosen
Out[15]: array([ 0.8873, 0.223 ])
我不确定这是你想要的,但它是一个可以给你(x,y)元组的单线:
import random
random.sample(zip(x, y), 2)
Out[22]: [(0.223, 1), (0.1123, 1)]