【发布时间】:2019-03-31 15:53:39
【问题描述】:
我有一段代码,它基于一个大的 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]))
【问题讨论】:
-
你可以试试scipy的稀疏矩阵。查看此post。
-
对于这么大的矩阵,这可能仍然太慢,但可能更好:
np.where(rand < 0.5, 2.0*rand, 1.0/(2.0*(1.0-rand))) -
@EricWang,我看不出稀疏矩阵与这个问题的相关性
rand没有高比例的零,beta也没有。 -
一种更快的方法,几乎不需要更改您的代码(我不会初始化一个完全用零覆盖并添加 @nb.njit(error_model="numpy) 的数组)将是 stackoverflow.com/q/52046301/4045774 .