Jak zrównoleglać prostą pętlę Pythona? Jest to prawdopodobnie trywialne pytanie, ale jak zrównoleglać następującą pętlę w Pythonie?
df["a"] = np.where(pd.notnull(df["a"]) == True, 6, 0)
df["b"] = np.where(pd.notnull(df["b"]) == True, 2, 0)
df["b"] = np.where(pd.notnull(df["b"]) == True, 1, 0)
df["c"] = np.where(pd.notnull(df["c"]) == True, 1, 0)
df["d"] = np.where(pd.notnull(df["d"]) == True, 1, 0)
df["e"] = np.where(pd.notnull(df["e"]) == True, 2, 0)
df["f"] = np.where(pd.notnull(df["f"]) == True, 1, 0)
df["g"] = np.where(pd.notnull(df["g"]) == True, 2, 0)
df["h"] = np.where(pd.notnull(df["h"]) == True, 2, 0)
df["i"] = np.where(pd.notnull(df["i"]) == True, 2, 0)
Jaki jest najłatwiejszy sposób na zrównoleglenie tego kodu?
Próbuję
df = ["a", "b","c", "d",.....]
df_score = [6,2,1,1, .....]
for I in range():
df[I] = np.where(pd.notnull(df[I]) == True, df_score[I], 0)
2 odpowiedzi
Jeśli próbujesz uprościć swój kod za pomocą struktur danych Pythona, sugeruję użycie słownika (kombinacja wartości df i df_score w strukturze klucz-wartość):
dct = {"a" : 6, "b" : 2, "c" : 1} # fill-in the rest of values
for key in dct:
df[key] = np.where(pd.notnull(df[key]) == True, dct[key], 0)
Jeśli masz na myśli programowanie równoległe, to jest to zupełnie inny problem, zobacz wątki w pythonie: https : //docs.python.org/3/library/threading.html
Aby uzyskać równoległe wykonanie, możesz użyć wątków:
# initialize df as before
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor() as pool:
def update(key, score):
df[key] = np.where(pd.notnull(df[key]) == True, score, 0)
for key, score in ("a", 6), ("b", 2), ...:
pool.submit(update, key, score)
To, czy rzeczywiście spowoduje to przyspieszenie, zależy od tego, czy Pandy zwolnią GIL podczas swoich obliczeń. Jedynym sposobem na poznanie jest mierzenie.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.