通过pandas数据帧和numpy进行迭代

2024-10-01 00:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我来自java背景,对numpy和pandas不太熟悉。 我想把下面的伪代码翻译成python。在

theta[0...D] - numpy
input[1...D][0...N-1] - Pandas data frame

伪代码:

^{pr2}$

实施:

class simulator:
    theta = np.array([])
    stddev = 0

    def __init__(self, v_coefficents, v_stddev):
        self.theta = v_coefficents
        self.stddev = v_stddev

    def sim( self, input ):
        mean = self.theta[0]
        D = input.shape[0]
        N = input.shape[1]

        for index, row in input.iterrows():
            mean = self.theta[0]
            for i in range(D):
                mean += self.theta[i+1] *row['y']

我关心的是最后一行代码中的迭代: mean += self.theta[i+1] *row['y']。在


Tags: 代码inselfnumpyforinputdefjava
1条回答
网友
1楼 · 发布于 2024-10-01 00:30:07

因为您使用的是NumPy,所以我建议将pandas dataframe提取为一个数组,然后我们就可以使用theta和{}的提取版本作为数组。在

因此,从一开始,我们将得到数组-

input_arr = input.values

那么,伪代码的翻译是-

^{pr2}$

为了执行和的归约,在NumPy支持向量化运算和^{}的情况下,我们的输出将简单地-

mean = theta[0] + (theta[1:D+1]*input_arr[:,1:D+1]).sum()

这可以用^{}作为矩阵乘法进一步优化,如下-

mean = theta[0] + np.dot(input_arr[:,1:D+1], theta[1:D+1]).sum()

请注意,如果您的意思是input的长度是D-1,那么我们需要进行一些编辑:

  1. 循环代码应该是:input_arr[row,col-1]而不是input_arr[row,col]。在
  2. 矢量化代码将有:input_arr而不是input_arr[:,1:D+1]。在

基于^{}-

In [71]: df = {'y' : [1,2,3,4,5]}
    ...: data_frame = pd.DataFrame(df)
    ...: test_coefficients = np.array([1,2,3,4,5,6])
    ...: 

In [79]: input_arr = data_frame.values
    ...: theta = test_coefficients
    ...: 

In [80]: theta[0] + np.dot(input_arr[:,0], theta[1:])
Out[80]: 71

相关问题 更多 >