我正在编写一个函数,用于计算包含约800列的pd.DataFrame中所有列的条件概率。我编写了几个函数版本,并发现在两个主要选项上计算时间存在很大差异:
col_sums = data.sum() #Simple Column Sum over 800 x 800 DataFrame
选项 #1: {'col_sums'和'data'分别是Series和DataFrame}
[这在一个循环中,循环遍历index1和index2来获取所有的组合]
joint_occurance = data[index1] * data[index2]
sum_joint_occurance = joint_occurance.sum()
max_single_occurance = max(col_sum[index1], col_sum[index2])
cond_prob = sum_joint_occurance / max_single_occurance #Symmetric Conditional Prob
results[index1][index2] = cond_prob
Vs.
选项#2:[在循环索引1和索引2以获取所有组合时]
唯一的区别是,在循环之前,将数据矩阵导出为np.array而不是使用DataFrame。
new_data = data.T.as_matrix() [Type: np.array]
选项#1运行时间约为1700秒 选项#2运行时间约为122秒
问题:
- 将DataFrames的内容转换为np.array对于计算任务最好吗?
- pandas中的.sum()例程与NumPy中的.sum()例程是否显着不同,或者速度差异是由于标签访问数据所致?
- 为什么这些运行时间如此不同?