gpt4 book ai didi

python - 从 Numpy 数组的每一行中选择一个随机样本,不包括负数

转载 作者:行者123 更新时间:2023-11-28 16:54:03 25 4
gpt4 key购买 nike

我有一个 Numpy 数组,看起来像

>>> a
array([[ 3. , 2. , -1. ],
[-1. , 0.1, 3. ],
[-1. , 2. , 3.5]])

我想从每一行中随机选择一个值,但我想从随机抽样中排除 -1 值。

我目前做的是:

x=[]
for i in range(a.shape[0]):
idx=numpy.where(a[i,:]>0)[0]
idxr=random.sample(idx,1)[0]
xi=a[i,idxr]
x.append(xi)

得到

>>> x
[3.0, 3.0, 2.0]

这对于大型数组来说变得有点慢,我想知道是否有一种方法可以有条件地从原始 a 矩阵中选择随机值,而无需单独处理每一行。

最佳答案

我真的不认为你会在 Numpy 中找到任何东西来完成你所要求的打包,所以我决定提供我能想到的优化。

有几件事可能会使这里变慢。首先,numpy.where() 相当慢,因为它必须检查切片数组中的每个值(也为每一行生成切片),然后生成一个值数组。如果您计划在同一个矩阵上一遍又一遍地执行此过程,那么您可以做的最好的事情就是对每一行进行排序。然后,您只需使用二进制搜索来查找正值的起始位置,然后使用随机数从中选择一个值。当然,您也可以在使用二进制搜索找到一次索引后,将索引存储在正值开始的位置。

如果您不打算多次执行此过程,那么我建议使用 Cython 来加速 numpy.where 行。 Cython 将允许您不需要将行切出并加快整个过程。

我最后的建议是使用 random.choice 而不是 random.sample 除非你真的打算选择大于 1 的样本量。

关于python - 从 Numpy 数组的每一行中选择一个随机样本,不包括负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com