对于矩阵的每个元素,我都有一个方程式.假设a_i,j=i+j.
有没有一种方法可以使用NumPy为我的矩阵并行地初始化NumPy数组,或者我必须使用线程/其他并行技术?这些元素是相互独立的.
对于矩阵的每个元素,我都有一个方程式.假设a_i,j=i+j.
有没有一种方法可以使用NumPy为我的矩阵并行地初始化NumPy数组,或者我必须使用线程/其他并行技术?这些元素是相互独立的.
如果你真的想要并行化这个矩阵的初始化,也许还有其他操作,看看Numba.在您的情况下,您可以编写如下内容
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
这里的prange()
表示并行化的循环.但您也可以只使用普通的Pythonrange()
,因为Numba循环已经比原始的PythonFor循环快得多.但实际上,您应该只使用Numba来执行更复杂的操作.如果您的目标只是为了避免运行缓慢的Python for循环,那么您也可以这样做
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
Note that some numpy operations will sometimes use multiple threads.一般来说,如果你想用NumPy数组快速处理问题,你必须学会用矩阵/向量运算而不是用for循环来思考.希望这个能帮上忙!