从numpy数组中随机选择

49

我有两个相关的numpy数组,Xy。我需要从X中选择n个随机行并将其存储在一个数组中,对应的y值,并将这些随机选定点的索引附加到它后面。

我还有另一个数组index,其中存储了我不想抽样的索引列表。

我该怎么做?

示例数据:

index = [2,3]
X = np.array([[0.3,0.7],[0.5,0.5] ,[0.2,0.8], [0.1,0.9]])
y = np.array([[0], [1], [0], [1]])
如果这些X是随机选择的(其中n=2):
randomylSelected = np.array([[0.3,0.7],[0.5,0.5]])

期望的输出将会是:

index = [0,1,2,3]
randomlySelectedY = [0,1]

我该如何做到这一点?


那么, randomlySelected 是已经给定还是需要创建? - Divakar
通过从 X 中随机选择 n 行来创建。@Divakar - scutnex
请问一下,当index没有被采样时,它是如何从[2,3]变为[0,1]的?index的目的是什么,它与其他数组有什么关系? - MSeifert
@MSeifert 的 index 包含了已经被采样过的项目列表,这些项目不应该再次被采样。 - scutnex
1
@scutnex 在这种情况下:感谢您的澄清,但您最好提出一个新问题,而不是以如此根本的方式更改问题(在它收到答案之后)。您能否将您的问题回滚到原始版本并提出一个新问题? - MSeifert
2个回答

79
你可以使用np.random.choice创建随机索引:
n = 2  # for 2 random indices
index = np.random.choice(X.shape[0], n, replace=False)  

然后您只需要使用该结果索引您的数组:

x_random = X[index]
y_random = Y[index]

8

为了将 @MSeifert 的答案封装在一个函数中:

def random_sample(arr: numpy.array, size: int = 1) -> numpy.array:
    return arr[np.random.choice(len(arr), size=size, replace=False)]

使用方法:

randomly_selected_y = random_sample(Y)

7
为什么没有这个功能,这样的使用场景非常普遍,真的很烦人。 - stimulate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接