我有两个给定的3d数组x_dist
和y_dist
,每个数组的形状都是(36,50,50)
。x_dist
和y_dist
中的元素属于np.float32
类型,可以是正数、负数或零。我需要创建一个新数组res_array
,在所有索引处将其值设置为(1-y_dist)*(x_dist)
,除了条件((x_dist <= 0) | ((x_dist > 0) & (y_dist > (1 + x_dist))))
为True
的索引。我目前的实现如下。
res_array = (1-y_dist)*(x_dist)
res_array[((x_dist <= 0) | ((x_dist > 0) & (y_dist > (1 + x_dist))))] = 0.0
然而,我需要运行包含此代码片段的代码数千次,我相信有一个更聪明,更快的方法来做同样的事情。你能帮我得到一个性能更好的代码或一行程序吗?
1条答案
按热度按时间t9eec4r01#
Numba JIT可以有效地实现这一点。下面是一个实现:
以下是随机输入矩阵的性能结果:
新的实现大约快13倍(不考虑编译/预热时间)。