如何创建数千个变量而不是使用DataFrame?用
更新元素df1.loc[a,b] = df1.loc[a,b] + update_term
太慢了!
我要使用这些股票价格计算的是下面显示的等式的3个参数。
由于每个445家公司都有一个 k ,b k (每个445个),并且445个公司对具有w j,k 个参数(总计(445 * 444)/ 2),有有这么多变量要创建。
要制作上述参数所需的变量,我制作了3个数据框,其中2个是a k ,b 的1 * 445尺寸(1行,445列) w j,k 的k 和445 * 445维。屏幕截图如下所示。
由于我使用df.loc函数(如
parameter = parameter + df.loc[date,'company_name']
我的代码太慢了!
下面是我代码中的一个真实示例。
A_random_parameter = df1.loc['row_index_1',company_x] +
df2.loc['row_index_2',company_x] *
df3.loc[date,'company_y']
有人建议创建数千个变量而不是使用类似DataFrame的方式吗?
答案 0 :(得分:0)
事实证明,正如John Zwinck所建议的那样,使用字典比使用DataFrame存储变量要快得多。谢谢!
答案 1 :(得分:0)
如果您需要像方程式所示那样运行矩阵计算,则需要使用具有快速随机元素访问和连续内存布局的数据结构。在python中,执行此操作的标准方法是使用numpy数组(https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.array.html)
此外,在任何您关心性能的此类操作中,不要都希望执行python循环并分别访问/更新每个元素。如果正在使用pandas数据帧,则不会;如果正在使用numpy数组,则不会;如果正在使用tensorflow或其他任何方法,则不会。相反,您希望对操作进行“向量化”,即使用“一次”对整个向量或矩阵进行处理的基本操作,以便适当的库可以在可能的情况下有效地并行化其执行。 NumPy Basics: Arrays and Vectorized Computation可能是相关的。