加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 哪个更快,numpy转置或翻转索引?

发布时间:2020-12-16 23:15:06 所属栏目:Python 来源:网络整理
导读:我有一个动态编程算法(修改后的Needleman-Wunsch),它需要两次相同的基本计算,但是第二次在正交方向上进行计算.例如,从矩阵scoreMatrix中的给定单元格(i,j),我想要从(i,j)的值“up”计算值,以及从(i)的“left”的值计算值.,J).为了重用代码,我使用了一个函数,
我有一个动态编程算法(修改后的Needleman-Wunsch),它需要两次相同的基本计算,但是第二次在正交方向上进行计算.例如,从矩阵scoreMatrix中的给定单元格(i,j),我想要从(i,j)的值“up”计算值,以及从(i)的“left”的值计算值.,J).为了重用代码,我使用了一个函数,在第一种情况下,我发送参数i,j,scoreMatrix,在下一种情况下,我发送j,i,scoreMatrix.transpose().以下是该代码的高度简化版本:
def calculateGapCost(i,gapcost):
  return scoreMatrix[i-1,j] - gapcost

...
gapLeft = calculateGapCost(i,gapcost)
gapUp = calculateGapCost(j,scoreMatrix.transpose(),gapcost)
...

我意识到我可以选择发送一个函数,在一个案例中,当从scoreMatrix中检索一个值时,它会通过参数(i,而在另一个例子中,它们将它们反转为(j,i),而不是转置矩阵每一次.

def passThrough(i,matrix):
  return matrix[i,j]

def flipIndices(i,matrix):
  return matrix[j,i]

def calculateGapCost(i,gapcost,retrieveValue):
  return retrieveValue(i-1,scoreMatrix) - gapcost

...
gapLeft = calculateGapCost(i,passThrough)
gapUp = calculateGapCost(j,flipIndices)
...

然而,如果numpy转置使用一些我不知道只在几个操作中进行转置的功能,那么转置实际上可能比我的传递函数想法更快.任何人都可以告诉我哪个会更快(或者如果有更好的方法我没有想到)?

实际的方法将调用retrieveValue 3次,并涉及2个将被引用的矩阵(如果使用该方法则转换).

解决方法

在NumPy中,转置返回一个具有不同形状和 strides的视图.它不会触及数据.

因此,您可能会发现这两种方法具有相同的性能,因为实质上它们完全相同.

但是,唯一可以肯定的方法是对两者进行基准测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读