Übertragen von DataFrames über NumPy-Array-Dimensionen hinwegPython

Python-Programme
Anonymous
 Übertragen von DataFrames über NumPy-Array-Dimensionen hinweg

Post by Anonymous »

Ich arbeite mit einem großen Pandas DataFrame und einem mehrdimensionalen NumPy-Array. Mein Ziel ist es, eine bestimmte Spalte des DataFrame effizient über eine oder mehrere Dimensionen des NumPy-Arrays zu „senden“ und dabei eine elementweise Operation auszuführen.
Nehmen wir an, ich habe ein DataFrame-DF wie dieses:

Code: Select all

import pandas as pd
import numpy as np

data = {'id': range(100), 'value': np.random.rand(100)}
df = pd.DataFrame(data)
Und ein NumPy-Array arr mit der Form (10, 5, 100, 20):

Code: Select all

arr = np.random.rand(10, 5, 100, 20)
Ich möchte df['value'] mit arr multiplizieren, sodass df['value'] mit arr[:, :, i, :] für alle i multipliziert wird. Im Wesentlichen sollte df['value'] mit der 3. Dimension von arr übereinstimmen.
Eine Lösung könnte die Iteration oder Verwendung von np.apply_along_axis beinhalten, was bei großen Arrays oft langsam ist:

Code: Select all

result_slow = np.zeros_like(arr)
for i in range(df.shape[0]):
result_slow[:, :, i, :] = arr[:, :, i, :] * df['value'].iloc[i]
Das funktioniert, aber für viel größere arr (z. B. Millionen in der dritten Dimension) und df wird es rechenintensiv.
Wie kann ich diese Multiplikation effizient lösen, indem ich NumPys Broadcasting ohne explizite Schleifen oder apply_along_axis nutze, um die Spalte df['value'] entlang einer bestimmten Achse (der 3. Achse in) zu multiplizieren? (in diesem Fall) des NumPy-Arrays?
Ich suche nach einer Lösung, die nicht nur für große Datensätze gut funktioniert, sondern auch speichereffizient ist.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post