Skip to main content
 首页 » 编程设计

python之如何有效地操作一个大的numpy数组

2025年05月04日21birdshome

我有一段代码是基于一个大的numpy数组然后操作另一个数组。因为这是一个非常大的数组,你能告诉我是否有一种有效的方法来实现我的目标吗? (我认为高效的方式应该是直接操作数组而不是通过for循环)。

提前致谢,请在下面找到我的代码:

N = 1000000000 
rand = np.random.rand(N) 
beta = np.zeros(N) 
for i in range(0, N): 
    if rand[i] < 0.5: 
        beta[i] = 2.0*rand[i] 
    else: 
        beta[i] = 1.0/(2.0*(1.0-rand[i])) 

请您参考如下方法:

你在这里基本上失去了 numpy 的效率,通过在 Python 中执行处理。 numpy 的想法是批量 处理项目,因为它在幕后使用 C++ 中的效率算法进行实际处理。您可以将 numpy 的 Python 端更多地视为“接口(interface)”。

现在回答你的问题,我们基本上可以先构造一个 0 到 2 之间的随机数数组,方法是将它与 2 相乘:

rand = 2.0 * np.random.rand(N) 

接下来我们可以使用np.where(..) [numpy-doc]它就像一个条件选择器:我们在这里传递三个“数组”:第一个是编码“条件”真实性的 bool 数组,第二个是要填充的值数组,以防相关条件是true,第三个值是在条件为 false 时插入的值数组,因此我们可以这样写:

N = 1000000000 
rand = 2 * np.random.rand(N) 
beta = np.where(rand < 1.0, rand, 1.0 / (2.0 - rand))