gpt4 book ai didi

python - Pandas :DataFrame.sum() 或 DataFrame().as_matrix.sum()

转载 作者:行者123 更新时间:2023-11-28 18:49:39 25 4
gpt4 key购买 nike

我正在编写一个函数来计算具有约 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

比。

选项 #2: [在遍历 index1 和 index2 以获取所有组合时]唯一的区别是我没有使用 DataFrame,而是在循环之前将 data_matrix 导出到 np.array

new_data = data.T.as_matrix() [Type: np.array]

选项 #1 运行时间约为 1700 秒选项 #2 运行时间约为 122 秒

问题:

  1. 将 DataFrame 的内容转换为 np.array 是否最适合计算任务?
  2. pandas 中的 .sum() 例程与 NumPy 中的 .sum() 例程是否有显着不同,或者速度上的差异是由于标签对数据的访问?
  3. 为什么这些运行时如此不同?

最佳答案

在阅读我遇到的文档时:

Section 7.1.1 Fast scalar value getting and setting Since indexing with [] must handle a lot of cases (single-label access, slicing, boolean indexing, etc.), it has a bit of overhead in order to figure out what you’re asking for. If you only want to access a scalar value, the fastest way is to use the get_value method, which is implemented on all of the data structures:

In [656]: s.get_value(dates[5])
Out[656]: -0.67368970808837059
In [657]: df.get_value(dates[5], ’A’)
Out[657]: -0.67368970808837059

最佳猜测:因为我多次从数据帧访问单个数据元素(每个矩阵大约 640,000 个)。我认为速度降低来 self 引用数据的方式(即“使用 [] 进行索引处理很多情况”),因此我应该使用 get_value() 方法来访问类似于矩阵查找的标量。

关于python - Pandas :DataFrame.sum() 或 DataFrame().as_matrix.sum(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com