非常に大きなリストの場合、位置のリストをバイナリのシーケンスに効率的に変換します[重複]
Aug 23 2020
私は非常に多くの位置(DNA遺伝子座)のリストを持っており、それをバイナリのシーケンスに変換する必要があります。
例:
入力:
[3,5] # positions 3 and 5
出力:
[0,0,1,0,1] # 1s only for third and fifth positions
入力リストのサイズは数百万のオーダーであり、最大位置は23億(DNAのサイズ)です。
回答
1 JanChristophTerasa Aug 23 2020 at 20:53
numpy.bincountを使用します:
a = [3, 5]
b = np.bincount(a) # (0, 0, 0, 1, 0, 1)
スライスすることにより、ゼロインデックス値を無視できます。
b = np.bincount(a)[1:] # (0, 0, 1, 0, 1)
ShimonCohen Aug 23 2020 at 20:56
arr = [3, 5]
print([1 if num + 1 in arr else 0 for num in range(arr[-1])])
プリント: [0, 0, 1, 0, 1]
Abhilash Aug 23 2020 at 20:55
標準のPythonソリューション:
input_array = [3, 5]
output_array = [1 if i in input_array else 0 for i in range(1,max(input_array)+1)]
出力:
[0, 0, 1, 0, 1]