我有两组具有相同功能的函数:一组使用循环编程,另一组使用numpy操作。“循环”比numpy实现慢
然后我试着用麻木加速他们。以下情况会发生:“loop”+numba比简单的“loop”快100倍,甚至比numba+numpy快100倍
问:我认为numba+numpy至少应该和numba+循环一样快?我的假设是错误的还是我用numpy实现函数的方式有问题? 有什么建议吗
使用numba+循环:
@jit()
def rebmun_of_ps_egnahcs_loop_numba(dip):
rebmun_of_ps_egnahcs = 0
for i in range(0, dip.shape[0] - 1):
if (
(dip[i + 1, 0] != dip[i, 0])
& ~np.isnan(dip[i, 0])
& ~np.isnan(dip[i + 1, 0])
& (dip[i + 1, 4] == 1)
& (dip[i, 4] == 1)
& (dip[i + 1, 3] == 0)
& (dip[i, 3] == 0)
):
rebmun_of_ps_egnahcs += 1
return rebmun_of_ps_egnahcs
@jit()
def rebmun_of_ps_egnahcs_loop_N_numba(dips_array_of_arrays):
dip_ps_egnahc_stluser = np.empty(dips_array_of_arrays.shape[0], dtype=np.float64)
dip_ps_egnahc_stluser.fill(np.nan)
for i in np.ndindex(dips_array_of_arrays.shape[0]):
dip_ps_egnahc_stluser[i] = rebmun_of_ps_egnahcs_loop_numba(dips_array_of_arrays[i])
return dip_ps_egnahc_stluser
使用numba+numpy:
@jit()
def rebmun_of_ps_egnahcs_numpy_numba(dip):
rebmun_of_ps_egnahcs = 0
spt = dip[:, 0]
ma = dip[:, 4]
lr = dip[:, 3]
rebmun_of_ps_egnahcs = np.sum(
np.not_equal(spt, np.roll(spt, 1))
& ~np.isnan(spt)
& ~np.isnan(np.roll(spt, 1))
& np.equal(np.roll(ma, 1), 1) & np.equal(ma, 1)
& np.equal(np.roll(lr, 1), 0) & np.equal(lr, 0)
)
return rebmun_of_ps_egnahcs
@jit()
def rebmun_of_ps_egnahcs_numpy_N_numba(dips_array_of_arrays):
dip_ps_egnahc_stluser = np.empty(dips_array_of_arrays.shape[0], dtype=np.float64)
dip_ps_egnahc_stluser.fill(np.nan)
for i in np.ndindex(dips_array_of_arrays.shape[0]):
dip_ps_egnahc_stluser[i] = rebmun_of_ps_egnahcs_numpy_numba(dips_array_of_arrays[i])
return dip_ps_egnahc_stluser
目前没有回答
相关问题 更多 >
编程相关推荐