Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有多个数组的numpy索引_Python_Arrays_Numpy - Fatal编程技术网

Python 具有多个数组的numpy索引

Python 具有多个数组的numpy索引,python,arrays,numpy,Python,Arrays,Numpy,给定两个数据序列(长度相等)和每个数据点的质量值,我想根据给定的评分矩阵计算相似性分数 将以下循环矢量化的最有效方法是什么: score = 0 for i in xrange(len(seq1)): score += similarity[seq1[i], seq2[i], qual1[i], qual2[i]] 相似性是一个四维浮点数组,形状=(32,32,100,100); seq1、seq2、qual1和qual2都是长度相等的一维整数数组(1000-40000个数量级)。这难

给定两个数据序列(长度相等)和每个数据点的质量值,我想根据给定的评分矩阵计算相似性分数

将以下循环矢量化的最有效方法是什么:

score = 0
for i in xrange(len(seq1)):
    score += similarity[seq1[i], seq2[i], qual1[i], qual2[i]]
相似性
是一个四维浮点数组,形状=(32,32,100,100);
seq1
seq2
qual1
qual2
都是长度相等的一维整数数组(1000-40000个数量级)。

这难道不管用吗(tm)

代码:

给出:

>>> timeit slow()
100 loops, best of 3: 3.59 ms per loop
>>> timeit fast()
10000 loops, best of 3: 143 us per loop
>>> np.allclose(slow(),fast())
True
这难道不应该起作用吗(tm)

代码:

给出:

>>> timeit slow()
100 loops, best of 3: 3.59 ms per loop
>>> timeit fast()
10000 loops, best of 3: 143 us per loop
>>> np.allclose(slow(),fast())
True
这个怎么样

score = numpy.sum(map(similarity.__getitem__, zip(seq1, seq2, qual1, qual2)))
当然,您也可以尝试使用itertools imap和izip。zip是必需的,因为
\uuuu getitem\uuuuuuuuuuuuuuuuuuuuuuuu>需要一个元组,而不是四个数字……也许可以通过查看itertools模块的较暗角落来改善这一点。

这个怎么样

score = numpy.sum(map(similarity.__getitem__, zip(seq1, seq2, qual1, qual2)))

当然,您也可以尝试使用itertools imap和izip。zip是必要的,因为
\uuuu getitem\uuuuuuuuuuuuuuuuuuuuu>需要一个元组,而不是四个数字……也许可以通过查看itertools模块的较暗角落来改善这一点。

这太好了。我更喜欢这个答案,而不是我自己的答案(尽管我可能会把我的答案留作对比)+1.这真是一个很棒的
numpy
功能,我不知道。谢谢在我的机器上进行1000次迭代的计时(包括John Zwinck的答案为“第三次”),长度10000:slow:17.1289219856,fast:0.61208987236,third:15.7027080059太棒了。我更喜欢这个答案,而不是我自己的答案(尽管我可能会把我的答案留作对比)+1.这真是一个很棒的
numpy
功能,我不知道。谢谢我的机器上1000次迭代的计时(包括John Zwinck的回答为“第三次”),长度10000:慢:17.1289219856,快:0.61208987236,第三次:15.7027080059