Numpy从2个数组

时间:2016-02-26 14:23:06

标签: python numpy numpy-random

我需要从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行代码,这是没有意义的...

4 个答案:

答案 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)]