我想创建一个numpy数组(在python中),其中轴值由上一个单元格中的值和一个附加函数决定。你知道吗
例如: 在以下示例中,y轴(行)上的值由以下公式确定:
Array[i:0] = Array[i-1:0] + 3 + some_other_func()
x轴(col)中的值由以下公式确定:
Array[0:i] = Array[0:i-1] + 4 + some_other_func()
[[0 4 8]
[3 0 0]
[6 0 0]
[9 0 0]]
我现在的代码如下:
matrix = np.zeros((len(seq1) + 1, len(seq2) + 1))
for i in range(1, len(seq1) + 1):
matrix[i][0] = matrix[i - 1][0] + get_pair_score(seq1[i - 1], GAP,
score_dict)
for j in range(1, len(seq2) + 1):
matrix[0][j] = matrix[0][j - 1] + get_pair_score(seq2[j - 1], GAP,
score_dict)
但是,运行起来要花很长时间(我的序列是很长的字符串……),我想知道是否有更有效的方法来实现这一点。你知道吗
我知道我可以使用以下语法填充行或列:
x[:,0] = some_value
x[0,:] = some_value
但是当一个单元格中的值依赖于前一个单元格时,我想不出一种方法来告诉numpy以类似的方式填充单元格。你知道吗
任何帮助或见解将不胜感激!你知道吗
我认为您要寻找的是accumulator函数,特别是cumsum,因为您要将前面的结果和当前的结果相加。你知道吗
让我们为第一列写一个等式,其中x[i]是第一列第i行的值,函数(i)是第i行的函数(即
get_pair_score(seq1[i - 1], GAP, score_dict)
),那么列值可以写为:现在你可以展开方程,用上面的方程替换这些值(例如,用0替换第二个方程中的x[i],用上面的方程替换第三个方程中的x[i+1],以此类推)
这里我们看到x[a]本质上是从0到a的函数的和 所以x就是cumsum([函数(i)表示范围(n)中的i)])
你的情况应该是这样的:
其中random_func(x)在您的例子中是
get_pair_score(x, GAP, score_dict)
。 如果您可以将get\u pair\u score()操作矢量化,这样您就可以np.cumsum公司(获取\u对\u列表)相关问题 更多 >
编程相关推荐