【问题标题】:python matrix muultiplication using numpy or pandas on a large dataset在大型数据集上使用 numpy 或 pandas 的 python 矩阵乘法
【发布时间】:2021-09-30 01:41:05
【问题描述】:

我有一个输入数据集(实际上它是一个 H2o 框架,但它可以转换为 pandas 或 numpy 数组),有超过 6000 万行。我需要用一个值列表对每一行进行减法、乘法和除法,如下所示

 Input dataset
    Col_0,      Col_1,      Col_2,      Col_3
    0.221,      0.331,      0.444,      0.555
    0.111,      0.222,      0.333,      0.444
    0.555,      0.323,      0.665,      0.999
    
To be processed with these values from a dictionary
    to_sub : [0.0002,       0.000004,       0.34334,        0.000005]
    to_mul : [1.333,        1.3433,     2.4334,     3.23232]
    to_div  : [1.8888,  1.6666,     1.7777,     1.89898]

like below
(Col_0-to_sub[0])*to_mul[0]/to_div[0],  (Col_1-to_sub[1])*to_mul[1]/to_div[1],  (Col_2-to_sub[2)*to_mul[2]/to_div[2], (Col_3-to_sub[3])*to_mul[3]/to_div[3]

现在,我使用嵌套的 for 循环来处理每一行,其中包含每个数组中的相应值。使用 numpy 或 pandas 或任何其他 python 库在 python 中执行此操作是否有任何其他更有效的方法?也可以使这个过程通用,这意味着输入数据集中的列数和 to_sub、to_mul、to_div 中的值的数量可能因不同的过程而异。但是对于同一进程,列数和数组值的数量将保持不变。

【问题讨论】:

    标签: python pandas numpy matrix-multiplication


    【解决方案1】:

    IIUC:

    ops = np.array([d['to_sub'], d['to_mul'], d['to_div']]
    out = (df - ops[0]) * ops[1] / ops[2]
    
    >>> out
           Col_0        Col_1        Col_2        Col_3
    0   0.155827     0.266787     0.137788     0.944676
    1   0.078196     0.178931    -0.014154     0.755739
    2   0.391544     0.260339     0.440303     1.700424
    
    
    >>> ops
    array([[2.00000e-04, 4.00000e-06, 3.43340e-01, 5.00000e-06],   # sub
           [1.33300e+00, 1.34330e+00, 2.43340e+00, 3.23232e+00],   # mul
           [1.88880e+00, 1.66660e+00, 1.77770e+00, 1.89898e+00]])  # div
    

    【讨论】:

    • 谢谢,没什么疑问。输入数据集是否应该转换为任何形式?输入数据集如何循环遍历每个 ops 数组值?
    • 在可以将其转换为 numpy 数组之前,无需转换您的输入数据。剩下的,花点时间阅读一下 numpy 是如何运作的。最重要的是 df 和 ops 的列数相同。
    • 顺便问一下,是你期待的结果吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2012-05-27
    • 1970-01-01
    • 2014-05-16
    • 2020-07-18
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多