繁体   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