我创建了一个列表:
clm0 clm1 clm2 clm3
1 aa ab ad, xx
2 cb ac af, yy
和一个按键值排序的字典(这里是字典的一部分):
arraynums = [ 0.3888553 0.3898553 0.3908553 0.3918553 0.3928553 0.3938553
0.3948553 0.3958553 0.3968553 0.3978553 0.3988553]
我一直在使用此代码查找与上面列表中列出的值最接近的值:
sd =({'0.3880434': ['GGATCG'], '0.3883449': ['TTCACG'], '0.388449': ['ATGGCG'], '0.3890966': ['ACTCGC'], '0.3893325': ['GTGGAT'], '0.3893478': ['GATACG'], '0.3900749': ['CAGAAG'], '0.3900875': ['CGAGAG'], '0.3900915': ['ATCGGG'], '0.3901032': ['CACCGG'], '0.3901743': ['AAAGAC'], '0.3906361': ['TACGGC'], '0.390682': ['CCATCG'], '0.3909258': ['GGATGA'], '0.3910728': ['AAGATA'], '0.391648': ['GCAACG'], '0.3919125': ['AGGACT', 'GATCGC'], '0.3921844': ['AGAGAA'], '0.3922956': ['CGGGAA'], '0.3927617': ['ATGGAA'], '0.3927763': ['TTGTCG'], '0.3928683': ['ACAGAC'], '0.39309': ['CGCGCT'], '0.3938553': ['AGGACG'], '0.3940998': ['AAGAGC'], '0.3941768': ['GTCGGA'], '0.394966': ['CGTTCC'], '0.395116': ['TGGAAG'], '0.3954179': ['CCGTCC'], '0.3955623': ['AATCGC'], '0.3956923': ['GGACGG']})
但是,从代码的这一部分打印的密钥和seq不能正确识别k的最接近的值。我不太清楚出了什么问题。我认为这可能与我创建for k in arraynums:
index = sd.bisect(k)
key = sd.iloc[index]
seq = sd[key]
列表的方式有关。我用这个创建了列表:
arraynums
编辑:
上面字典的注释:一些值是负数,每个键的输出是相同的负值...我还使用arraynums = numpy.arange(float(middlevalue) - 0.005, float(middlevalue) + 0.005, 0.001)
答案 0 :(得分:1)
超出类型不匹配(sd
键是str而arraynums
元素是浮点数),一种有效的方法可以是:
keys=list(zip(sd.items()))
values= array([x[0] for x in sd.values()])
indices=np.searchsorted(sorted(sd.keys()),arraynums)
In [390]: indices
Out[390]: array([ 3, 6, 13, 16, 21, 23, 26, 31, 31, 31, 31], dtype=int64)
indices
说arraynums [0]在键[2]和键[3]之间等等(见searchsorted)。最后一个值只有一个问题:可以通过其他边界选择来避免它。您刚才要比较最接近的结论。