Tod*_*tte 7 python performance transpose numpy
我有一个动态编程算法(修改后的Needleman-Wunsch),它需要两次相同的基本计算,但是第二次在正交方向上进行计算.例如,从一个给定小区(I,J)中矩阵scoreMatrix,我想都计算从值"向上"从一个值(I,J) ,以及从值提供给"左"的值(ⅰ ,j).为了重用代码,我使用了一个函数,在第一种情况下,我发送参数i,j,scoreMatrix,在下一种情况下,我发送j,i,scoreMatrix.transpose().以下是该代码的高度简化版本:
def calculateGapCost(i,j,scoreMatrix,gapcost):
return scoreMatrix[i-1,j] - gapcost
...
gapLeft = calculateGapCost(i,j,scoreMatrix,gapcost)
gapUp = calculateGapCost(j,i,scoreMatrix.transpose(),gapcost)
...
Run Code Online (Sandbox Code Playgroud)
我意识到我可以选择发送一个函数,在一个案例中,当从scoreMatrix中检索一个值时,它会通过参数(i,j),而在另一个例子中,它们将它们反转为(j,i),而不是转置矩阵每一次.
def passThrough(i,j,matrix):
return matrix[i,j]
def flipIndices(i,j,matrix):
return matrix[j,i]
def calculateGapCost(i,j,scoreMatrix,gapcost,retrieveValue):
return retrieveValue(i-1,j,scoreMatrix) - gapcost
...
gapLeft = calculateGapCost(i,j,scoreMatrix,gapcost,passThrough)
gapUp = calculateGapCost(j,i,scoreMatrix,gapcost,flipIndices)
...
Run Code Online (Sandbox Code Playgroud)
但是,如果numpy的转置使用的一些功能,我不知道做转置在短短几分钟的操作,这可能是因为转置实际上比我穿通功能的想法更快.任何人都可以告诉我哪个会更快(或者如果有更好的方法我没有想到)?
实际的方法将调用retrieveValue 3次,并涉及2个将被引用的矩阵(如果使用该方法则转换).
| 归档时间: |
|
| 查看次数: |
3941 次 |
| 最近记录: |