我想编写一个函数,它将采用lefts形状索引(N_ROWS,)我想编写一个函数,它将创建一个矩阵out = (N_ROWS, N_COLS)矩阵,使得out[i, j] = 1当且仅当j >= lefts[i]。在循环中执行此操作的一个简单示例如下:
class Looped(Strategy):
def copy(self, lefts):
out = np.zeros([N_ROWS, N_COLS])
for k, l in enumerate(lefts):
out[k, l:] = 1
return out
Run Code Online (Sandbox Code Playgroud)
现在我希望它尽可能快,所以我对此函数有不同的实现:
@njitctypes以下是 100 次运行的平均结果:
Looped took 0.0011599776260009093
Numba took 8.886413300206186e-05
CPP took 0.00013200821400096175
Run Code Online (Sandbox Code Playgroud)
因此 numba 大约是第二快的实现(即 C++ 实现)的 1.5 倍。我的问题是为什么?
-O3是否足以让我拥有编译器将给我的所有可能的优化?Looped took …Run Code Online (Sandbox Code Playgroud)