python 在大型数据集上使用 numpy 或 pandas 的矩阵乘法
python matrix muultiplication using numpy or pandas on a large dataset
我有一个超过 6000 万行的输入数据集(实际上它是一个 H2o Frame,但它可以转换为 pandas 或 numpy 数组)。我需要用值列表对每一行进行减法、乘法和除法,如下所示
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 循环来处理每个数组中相应值的每一行。在 python 中使用 numpy 或 pandas 或任何其他 python 库还有其他更有效的方法吗?也可以使这个过程通用,这意味着输入数据集中的列数和 to_sub、to_mul、to_div 中的值的数量可能因不同的过程而异。但是列数和数组值的数量对于相同的过程将保持不变。
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
我有一个超过 6000 万行的输入数据集(实际上它是一个 H2o Frame,但它可以转换为 pandas 或 numpy 数组)。我需要用值列表对每一行进行减法、乘法和除法,如下所示
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 循环来处理每个数组中相应值的每一行。在 python 中使用 numpy 或 pandas 或任何其他 python 库还有其他更有效的方法吗?也可以使这个过程通用,这意味着输入数据集中的列数和 to_sub、to_mul、to_div 中的值的数量可能因不同的过程而异。但是列数和数组值的数量对于相同的过程将保持不变。
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