Converti in modo efficiente un elenco di posizioni in una sequenza di binari per un elenco molto grande [duplicato]
Aug 23 2020
Ho un elenco molto ampio di posizioni (loci del DNA) e devo convertirlo in una sequenza di binari.
Esempio:
Ingresso:
[3,5] # positions 3 and 5
Produzione:
[0,0,1,0,1] # 1s only for third and fifth positions
La dimensione dell'elenco di input è dell'ordine di milioni e la posizione massima è 2,3 miliardi (la dimensione del DNA).
Risposte
1 JanChristophTerasa Aug 23 2020 at 20:53
Usa numpy.bincount:
a = [3, 5]
b = np.bincount(a) # (0, 0, 0, 1, 0, 1)
Puoi ignorare il valore di indice zero affettando:
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])])
Stampe: [0, 0, 1, 0, 1]
Abhilash Aug 23 2020 at 20:55
Soluzione Python standard:
input_array = [3, 5]
output_array = [1 if i in input_array else 0 for i in range(1,max(input_array)+1)]
Produzione:
[0, 0, 1, 0, 1]