Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有效地将函数应用于系列中的每个可能对_Python_Pandas_Numpy - Fatal编程技术网

Python 有效地将函数应用于系列中的每个可能对

Python 有效地将函数应用于系列中的每个可能对,python,pandas,numpy,Python,Pandas,Numpy,我有一个有20k条目的索引熊猫系列。每个条目都是一个字符串数组 id | value 0 | ['abc', 'abc', 'def'] 1 | ['bac', 'c', 'def', 'a'] 2 | ... ...| 20k| ['aaa', 'rzt'] 我想将每个条目(字符串列表)与该系列的每个其他条目进行比较。我有一个复杂的比较函数,它接受两个字符串列表并返回一个浮点 结果应该是一个矩阵 id | 0 | 1 | 2 | ... | 20k 0 | 1 0

我有一个有20k条目的索引熊猫系列。每个条目都是一个字符串数组

id | value

0  | ['abc', 'abc', 'def']
1  | ['bac', 'c', 'def', 'a']
2  | ...
...|
20k| ['aaa', 'rzt']
我想将每个条目(字符串列表)与该系列的每个其他条目进行比较。我有一个复杂的比较函数,它接受两个字符串列表并返回一个浮点

结果应该是一个矩阵

id | 0  |  1  |  2  | ... | 20k

0  | 1    0.5   0.4
1  | 0.5   1    0.2
2  | 0.4  0.2    1
...|
20k|
计算每个矩阵元素的结果的双循环需要我的计算机3个多小时。 如何有效地应用/并行化比较函数?我尝试使用numpy阵列进行广播,但没有成功(没有加速)


这取决于你的功能。我怀疑接受两个字符串列表并返回一个浮点的复杂函数是否可以像x+4矢量化一样“矢量化”。如果是某种模糊匹配,你需要运行400米的计算,所以不会很快。在这种情况下,200米-20000,因为它似乎是对称的。加速的机会主要取决于你想要应用的
compare\u函数的形式。如果计算是独立的,则可以显式地跨CPU核并行化。此外,如果
compare_函数
是对称的,则只能计算对角线矩阵并复制到另一个对角线。要应用这两种方法,可以使用中建议的拆分。所有这些都不一定是
pandas
支持开箱即用的.Ty。计算是独立的,函数确实是对称的。它计算两个列表之间的特定距离。我将尝试显式并行。我希望numpy/pandas能够使用多核应用一个独立的函数。
values = df['value'].values
broadcasted = np.broadcast(values, values[:,None])
result = np.empty(broadcasted.shape)
result.flat = [compare_function(u,v) for (u,v) in broadcasted]