python - 如何在 np 数组中随机选择一个元素(仅当它不是某个值时)

标签 python arrays numpy

我正在使用python

我有一个可能很简单的问题,尽管我看不到它。

如果我有一个数组x = array([1.0,0.0,1.5,0.0,6.0])y = array([1,2,3,4,5] )

我正在寻找一种有效的方法来在 1.01.56.0 之间随机选择,忽略所有零,同时保留索引进行比较与另一个数组,例如y。因此,如果我随机选择 6.0,我仍然可以将其与 y[4] 联系起来。

高效位的原因是,最终我想从 1000+ 数组中选择可能的 10 个值,其余为零。其他计算的强度取决于数组的大小,尽管它很容易变得比 1000 大得多。

谢谢

最佳答案

.nonzero() 只会跳过 0 ,对于您想要跳过的任何值,这是一个解决方案:

In [281]:

x = np.array([1.0,0.0,1.5,0.0,6.0])
non_zero_idx=np.argwhere(x!=0).flatten()
np.random.shuffle(non_zero_idx)
random_pick=x[non_zero_idx]
random_pick[0]
Out[281]:
1.5
In [282]:

%%timeit

x = np.array([1.0,0.0,1.5,0.0,6.0])
non_zero_idx=np.argwhere(x!=0).flatten()
np.random.shuffle(non_zero_idx)
random_pick=x[non_zero_idx]
random_pick[0]
10000 loops, best of 3: 104 µs per loop

如果您只是想获得一个随机选择(而不是随机选择的数组),x[np.random.choice(non_zero_idx,1)]就足够了。但这实际上更慢:

In [286]:

%%timeit

x = np.array([1.0,0.0,1.5,0.0,6.0])
non_zero_idx=np.argwhere(x!=0).flatten()
x[np.random.choice(non_zero_idx,1)]
10000 loops, best of 3: 173 µs per loop

正如 @AndyHayden 指出的,有三种方法可以获取随机选择,不同的数组大小表现不同:

In [299]:

X=np.random.random(100000)
In [300]:

%timeit np.random.choice(X, 1)
%timeit X[np.random.randint(0,len(X),1)]
10000 loops, best of 3: 70.3 µs per loop
100000 loops, best of 3: 12.6 µs per loop
In [301]:

%%timeit
np.random.shuffle(X)
X[0]
10 loops, best of 3: 130 ms per loop

In [302]:

X=np.random.random(10000)
In [303]:

%timeit np.random.choice(X, 1)
%timeit X[np.random.randint(0,len(X),1)]
10000 loops, best of 3: 70.1 µs per loop
100000 loops, best of 3: 12.6 µs per loop
In [304]:

%%timeit
np.random.shuffle(X)
X[0]
100 loops, best of 3: 12.6 ms per loop

看来X[np.random.randint(0,len(X),1)]是最好的。

关于python - 如何在 np 数组中随机选择一个元素(仅当它不是某个值时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440923/

相关文章:

python - scipy.optimize.linprog - 难以理解参数

python - 尝试在 for 循环中从用户列表中插入值会引发 IndexError

php - 检索数组的最后一个数字(不是索引)——PHP 和 MySQL

arrays - Swift 通过在每个索引处获取 max() 从两个 int 数组创建一个 Int 数组

python - 数巴 0.35.0 : Use NumPy out parameter

python - 尝试使用 pip 安装 matplotlib 和 numpy 时出现错误

python - 使用python在3d图中叠加图像

python - 从 DataFrame 中删除重复的行,但将一列保留为列表-Python

python - celery django解释

javascript - 遍历对象数组并输出自定义对象