简短说明:该问题与another I asked previously有关,但是由于在单个问答中提出多个问题被认为是不好的SO风格,因此我将其拆分。
设置
我有以下两种矩阵计算实现:
matrix of shape (n, m)
,并且在for循环中重复计算repetition
次:import numpy as np
def foo():
for i in range(1, n):
for j in range(1, m):
_deleteA = (
matrix[i, j] +
#some constants added here
)
_deleteB = (
matrix[i, j-1] +
#some constants added here
)
matrix[i, j] = min(_deleteA, _deleteB)
return matrix
repetition = 3
for x in range(repetition):
foo()
2.第二种实现方式避免了额外的for循环,因此将repetition = 3
包含在矩阵中,该矩阵即为shape (repetition, n, m)
的矩阵:
def foo():
for i in range(1, n):
for j in range(1, m):
_deleteA = (
matrix[:, i, j] +
#some constants added here
)
_deleteB = (
matrix[:, i, j-1] +
#some constants added here
)
matrix[:, i, j] = np.amin(np.stack((_deleteA, _deleteB), axis=1), axis=1)
return matrix
问题
关于这两种实现,我发现它们与iPython中%timeit
的性能有关。
numpy
在三维而不是二维上这么慢?