我有一个中等大的np数组(但将来可能会变得更大):

import numpy as np
x = np.arange(100_000).reshape((10_000,10))

我需要迭代地 Select 一个随机样本(行),确保我永远不会 Select 同一样本两次.目前我正在做

rng = np.random.default_rng(seed=42)
indices = list(range(len(x)))
for _ in range(1000):
    i = rng.choice(indices)
    ## do something with x[i]
    indices.remove(i)

然而,我读到remove相当慢.有更好的方法来跟踪我已经使用的指数吗?

推荐答案

只需使用rng.choice并提前生成指数(从范围0、N-1进行采样,无需替换),然后迭代它们.

rng = np.random.default_rng(seed=42)
idxs = rng.choice(len(x), replace=False)
for i in idxs:
    # do something with x[i]

Python相关问答推荐

当跨文件且参数化时,Pytest依赖项不起作用

Flask主机持续 bootstrap 本地IP| Python

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

这家einsum运营在做什么?E = NP.einsum(aj,kl-il,A,B)

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

@Property方法上的inspect.getmembers出现意外行为,引发异常

如何将双框框列中的成对变成两个新列

在线条上绘制表面

为什么默认情况下所有Python类都是可调用的?

使用setuptools pyproject.toml和自定义目录树构建PyPi包

如何获取numpy数组的特定索引值?

OR—Tools CP SAT条件约束

将tdqm与cx.Oracle查询集成

在vscode上使用Python虚拟环境时((env))

使用密钥字典重新配置嵌套字典密钥名

Asyncio:如何从子进程中读取stdout?

删除marplotlib条形图上的底边

合并帧,但不按合并键排序

Python—转换日期:价目表到新行