import numba as nb
import numpy as np
N = 100
# Initialize memory
a = np.zeros((N,N), dtype=np.int64)
@nb.njit('void(int64[:,::1])', parallel=True, cache=True) #
def initialize_array (a):
for i in nb.prange(a.shape[0]):
for j in nb.prange(a.shape[1]):
a[i,j] = i + j
initialize_array(a)
print(a[4,3]) # 7
import numba as nb
import numpy as np
N = 100
# Initialize memory
i = np.arange(N).reshape(-1,1)
j = np.arange(N).reshape(1,-1)
a = i + j
print(a[3,4]) # 7
1条答案
按热度按时间aor9mmx11#
如果你真的想并行化这个矩阵的初始化和其他操作,看看Numba。在你的例子中,你可以写类似这样的东西
这里的
prange()
表示并行化的循环。但是你也可以只使用普通的pythonrange()
,因为Numba循环已经比原始Python循环快得多。但实际上,您应该只使用Numba进行更复杂的操作。如果您的目标只是避免Python for循环速度慢,那么您也可以做如下的事情请注意,一些numpy操作有时会使用多个线程。一般来说,如果你想快速地使用numpy数组,你必须学会从矩阵/向量操作的Angular 来思考,而不是从for循环的Angular 来思考。希望这有帮助!