如何高效操作大型 numpy 数组

2024-02-05

我有一段基于大型 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]))

通过在 Python 中执行处理,你基本上失去了 numpy 的效率。 numpy 的思想是处理中的项目bulk,因为它在幕后具有执行实际处理的 C++ 高效算法。您可以将 numpy 的 Python 端更多地视为“接口”。

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

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

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

N = 1000000000
rand = 2 * np.random.rand(N)
beta = np.where(rand < 1.0, rand, 1.0 / (2.0 - rand))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何高效操作大型 numpy 数组 的相关文章

随机推荐