Python 偏序极大元
我正在寻找Python代码,以找到偏序中的最大元素 还有另外两个帖子解决了这个问题Python 偏序极大元,python,Python,我正在寻找Python代码,以找到偏序中的最大元素 还有另外两个帖子解决了这个问题 但它们只有模糊的描述,没有代码。自从有人提出这些问题以来,也有几年过去了 编辑:更具体地说,他们都建议构建DAG。我自己的想法是使用一些循环,并在列表中添加和删除。然而,我想知道是否有一些简短的“pythonic”方式来编码这个 更准确地说,我有一个数组列表,其中的条目为0,1;都一样长。这些数组是GF(2)上某个矩阵的图像空间,该域只有0和1 设x和y为两个数组。 我说x经过更多的测试,我最终得到了以下
x
和y
为两个数组。
我说
x经过更多的测试,我最终得到了以下代码。上面的问题代码仍然有一些bug
import numpy as np
def maximal_elements(input_list):
"""Given a list of np.array, compute the maximal elements.
Call:
maximal = maximal_elements(input_list)
Input:
input_list: list of np.array, all need to have the same length.
Output:
maximal: list of np.array, which contains the maximal elements of input_list,
the order used is elementwise "<="
"""
l = input_list.copy()
l.sort(reverse=True, key=np.sum)
maximal = [l[0]]
for e in l[1:]:
i = 0
replaced = False
while i < len(maximal):
if (maximal[i] <= e).all():
if replaced:
maximal.pop(i)
i -= 1
else:
maximal[i] = e.copy()
replaced = True
if (e <= maximal[i]).all():
if not (e == maximal[i]).all():
break
i += 1
if i == len(maximal) and not replaced:
maximal.append(e.copy())
return maximal
import itertools
import random
random.seed(2)
l = [np.array(e) for e in random.sample(list(itertools.product([0,1], repeat=5)), 9)]
maximal_elements(l)
将numpy导入为np
定义最大元素(输入列表):
“”“给定np.array的列表,计算最大元素。
电话:
最大=最大元素(输入列表)
输入:
input_list:np.array的列表,都需要有相同的长度。
输出:
Maximum:np.array的列表,其中包含输入_列表的最大元素,
使用的顺序是元素级的“公式中的x
和y
是什么?如果您找不到已经这样做的代码,那么是时候自己编写了。@PaxVobiscum OP定义这个问题我不清楚。其中一个链接描述了一个非常简单的算法来解决这个问题。你就不能实现它吗?如果没有,问题是什么?请说得更具体些。@Code学徒啊,好的,他是说array x
[1 1 0]
[1 0 0]
[1 0 1]
[1 1 0]
[1 0 1]
import numpy as np
l = [np.array([1, 1, 0]), np.array([1, 0, 0]), np.array([0, 1, 1])]
l.sort(reverse=True, key=np.sum)
maximal = [l[0]]
for e in l:
i = 0
replaced = False
while i < len(maximal):
if (maximal[i] <= e).all():
if replaced:
maximal.remove(maximal[i])
else:
maximal[i] = e.copy()
replaced = True
if (e <= maximal[i]).all():
break
i += 1
if i == len(maximal) and not replaced:
maximal.append(e.copy())
import numpy as np
def maximal_elements(input_list):
"""Given a list of np.array, compute the maximal elements.
Call:
maximal = maximal_elements(input_list)
Input:
input_list: list of np.array, all need to have the same length.
Output:
maximal: list of np.array, which contains the maximal elements of input_list,
the order used is elementwise "<="
"""
l = input_list.copy()
l.sort(reverse=True, key=np.sum)
maximal = [l[0]]
for e in l[1:]:
i = 0
replaced = False
while i < len(maximal):
if (maximal[i] <= e).all():
if replaced:
maximal.pop(i)
i -= 1
else:
maximal[i] = e.copy()
replaced = True
if (e <= maximal[i]).all():
if not (e == maximal[i]).all():
break
i += 1
if i == len(maximal) and not replaced:
maximal.append(e.copy())
return maximal
import itertools
import random
random.seed(2)
l = [np.array(e) for e in random.sample(list(itertools.product([0,1], repeat=5)), 9)]
maximal_elements(l)