Python中文
首页
教程
问答
标签
搜索
登录
注册
排列,创建限制
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我使用的是Python,还有Pandas和Numpy,不过这个问题看起来更像是一个更通用的算法设计问题。在</p> <p>我有一个元素列表(实际上是一个数组),我想生成该列表的排列。但是,某些项目不允许位于列表中的某些位置。我想生成一个服从这些限制的排列。什么是有效的方法?在</p> <p>我的实际用途是一个Pandas数据帧,有两列<code>X</code>和{<cd2>}。<code>X</code>和{<cd2>}都有相同的数字,顺序不同。数字不是唯一的。同一行中的<code>X</code>和<code>Y</code>中没有数字(即没有数字与自身匹配)。我想置换<code>Y</code>,同时保持没有数字与自身匹配的限制。我在<code>Y</code>上调用了Numpy的<code>permute</code>,但是大约有1%的结果行是<code>X==Y</code>。在</p> <p>编辑示例:</p> <pre><code>import pandas as pd import numpy as np data = [[1,2], [1,4], [4,2], [2,3]] df = pd.DataFrame(columns=['X', 'Y'], data=data) df_permuted = df.copy() df_permuted.Y = np.random.permutation(df.Y) print(df.X==df.Y) #0 False #1 False #2 False #3 False #dtype: bool print(df_permuted.X==df_permuted.Y) #0 False #1 False #2 False #3 True #dtype: bool </code></pre> <p>编辑: 明显的算法太慢/无法扩展,是:</p> ^{pr2}$ <p>在我们的熊猫例子中,这将是:</p> <pre><code>from numpy.random import choice for i in df.index: other_rows = df[(df.ix[i].X != df.Y) * (df.ix[i].Y != df.X)] selected_row = choice(other_rows.index) original_Y = df.ix[i].Y df.ix[i].Y = df.ix[selected_row].Y df.ix[selected_row].Y = original_Y print(df.X==df.Y) #0 False #1 False #2 False #3 False #dtype: bool </code></pre> <p>问题是这太慢了,根本没有并行化。有没有一种方法可以并行化?我想答案是“不”,因为在一行进行的交换会影响到下一行的有效“其他人”。在</p> <p>缩放感编辑: 大约1.4*10^7行,X中有2*10^6个唯一值,Y中有一个相似的数。需要生成大约10^3个独立的置换。实际上,我把一组行单独排列,有些组很小(例如10行),但很多组相当大(10^5)。这买了一点帮助,但最后还是有很多争吵!只需在10^7行上运行一个简单的<code>np.random.permutation</code>大约需要7秒,这就足够了。运行上面的限制排列算法(为了提高速度,用numpy而不是pandas实现)只需7秒,只需10^3行。呃!在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>为什么不直接做你正在做的事情(永久性Y),但最后检查一下,确保没有匹配项:</p> <pre><code>if (df.X == df.Y).any(): reject_dataframe() </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
Python中两个字典的交集
3 回答
python中两个字符串上的异或操作数?
9 回答
Python中两个字符串中的类似句子
3 回答
Python中两个字符串之间的Hamming距离
4 回答
python中两个字符串之间的匹配模式
2 回答
python中两个字符串之间的按位或
8 回答
python中两个字符串之间的数据(字节)切片
8 回答
python中两个字符串之间的模式
8 回答
python中两个字符串作为子字符串的区别
7 回答
Python中两个字符串元组的比较
6 回答
Python中两个字符串列表中的公共字符串
1 回答
python中两个字符串的Anagram测试
4 回答
Python中两个字符串的正则匹配
10 回答
python中两个字符串的笛卡尔乘积
10 回答
Python中两个字符串相似性的比较
3 回答
python中两个字符串语义相似度的求法
3 回答
Python中两个字符置换成固定长度的字符串,每个字符的数目相等
1 回答
Python中两个对数方程之间的插值和平滑数据
5 回答
Python中两个对象之间的And/Or运算符
6 回答
python中两个嵌套字典中相似键的和值
2 回答