簡體   English   中英

如何讓 numpy 索引更高效更快

[英]How to make numpy indexing more efficient and faster

我正在嘗試預處理我的數據集以用於深度學習。 我有一個包含數據的 csv 文件,我使用 pandas 讀取它並嘗試對其進行預處理。 第一列是一個字符串,所有其他列都是浮點數。 我想對所有帶有浮點數的列使用最小最大規范化。

#Reading csv with pandas
metadatas=pd.read_csv(os.path.join(dataset_dir,"metadata.csv"),header=None)
metadatas=np.array(metadatas)
metadatas_values=metadatas[:,1:]

#normalize the float datas
scaler=preprocessing.MinMaxScaler()
scaler.fit(metadatas_values)
metadatas_scaled=scaler.transform(metadatas_values)

#Create dataframe to insert the string column ('filename') back to data and turn it back to array again
df_scaled=pd.DataFrame(metadatas_scaled)
df_scaled.insert(0,'filename',metadatas[:,0])
metadatas_scaled=np.array(df_scaled)

#Use for loop to index float columns based on string column'filename'
for filename in filenames:
    metadata=metadatas_scaled[np.where(metadatas_scaled==filename)[0]][0,1:]

我認為當我有> 30000個文件時,我的代碼效率低下且運行緩慢。 我認為最耗時的事情是在 for 循環中索引數組。 有沒有更有效的方法來做到這一點? 先感謝您!

這是一些優化的代碼。 這個想法是最小化新 arrays 的分配並使用 groupby() 而不是循環+索引。

# read file and set the first column as index
df = pd.read_csv(
    os.path.join(dataset_dir,"metadata.csv"), 
    header=None, 
    index_col=0
)

# scale all columns except index (our string column)
# + reuse index and column names from the original DataFrame
df_scaled = pd.DataFrame(
    MinMaxScaler().fit_transform(df.values), 
    index=df.index, 
    columns=df.columns
)

# group by index (our string column)
for metadata in df_scaled.groupby(level=0):
    # do smth with metadata
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM