考虑a = np.array([0, 0, 1, 1, 2, 2, 3, 3])
在多重集a
中,0、1、2和3各有2个示例。
当我们从左到右遍历每一行时,我想找到满足条件的a
的所有排列:
**条件:**0、1、2和3的第一个示例必须按此顺序出现,但它们不必连续。
[0, 1, , 2, , 3, , ]
正常,[0, 1, , 3, , 2, , ]
不正常
每个数字的第二个示例可以出现在行中的任何位置,只要它在第一个示例之后(右侧)。[0, 1, 0, 2, 2, 3, 1, 3]
可以
我首先找到多重集a
的所有8!/2**4 = 2525个排列:
from sympy.utilities.iterables import multiset_permutations
import numpy as np
a = np.array([0, 0, 1, 1, 2, 2, 3, 3])
resultList = []
for p in multiset_permutations(a):
resultList.append(p)
out = np.array(resultList)
我的困难在于,当我试图设置条件时,我会淹没在细节中。更复杂的是,实际的数组a
可能有多达5对值。**问题:**如何编写条件,以便从数组out
中消除所有不满足条件的排列行?
1条答案
按热度按时间nlejzf6q1#
由于您知道数组恰好由
np.arange(4)
中的元素对组成,因此可以使用np.argmax
检查:则
resultList
将包含4
对的420
置换;而4725
对应于5
对。