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]