跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 大佬们求问一下 我有一个需求 Python 能实现吗?
未分類
20 7 月 2020

大佬们求问一下 我有一个需求 Python 能实现吗?

大佬们求问一下 我有一个需求 Python 能实现吗?

資深大佬 : L4Liiyooooo 5

如我有这么一个表 行为 a,b,c,d,e 列为 A,B,C,D,E 内容都是数字
我想使行 a,b,c,d,e 任意(随意,随机)组合做相加 满足比如 A>1,B>2,C>3,D<4,E<5 的几个条件 或者列出所有满足条件的组合 可以使用 python 设计一个简单的程序吗?有没什么书籍或者视频可以参考的?

大佬有話說 (22)

  • 資深大佬 : laike9m

    和 Python 有啥关系?难道不写 SQL 么

  • 資深大佬 : laike9m

    好吧当我没说。建议把输入和想要的输出写清楚,这样才好回答

  • 資深大佬 : gwy15

    没看懂你定义的“随意随机”是什么意思,我描述下我的理解。

    矩阵 A_ij 是 5×5 的矩阵,选出其中若干行,将行向量相加,得到 a,要求 a_0 > 1, a_1 > 2, etc.

    如果是每行 01 选择的话直接位运算就行,2^5 复杂度;
    如果是每行都可以若干次选择(线性组合),那就解五元线性不等式就行了,找本优化方面的书看。

  • 主 資深大佬 : L4Liiyooooo

    @laike9m 我不懂。。。 我想着实现一个简单的程序 所以觉得应该要用 python 如果 sql 可以实现的话也可以的 只要能实现 用啥都行。。。 抱歉刚才不会发图片 我以为不能发
    这个表格
    大佬们求问一下 我有一个需求 Python 能实现吗?

  • 主 資深大佬 : L4Liiyooooo

    @gwy15 比如 a+b+c 或者 a+b+e 同时满足条件 因为我想一次输出一个结果 所以说随意,随机
    大佬你这方法对我来说有点困难了 我看不懂。。。 如果需要这么难的话 我还是暂时先放弃了。。。

  • 資深大佬 : Yourshell

    搜索 subset sum

  • 資深大佬 : MOONLIGHTT

    pandas 或者 numpy

  • 資深大佬 : Counter

    我很想帮你,但是实在不懂你在说什么,谁理解了说下

  • 資深大佬 : jstony

    这还要 python,太杀鸡用牛刀了吧,excel 的筛选不好用吗

  • 資深大佬 : aloxaf

    直接用现成的 SAT Solver 即可,比如 z3

    https://fars.ee/rJgx/py

  • 資深大佬 : AX5N

    我猜主是这个意思
    “`
    for i in list:
    if list[0] > 1 and list[1] > 2 and list[2] > 3 and list[3] > 4 and list[4]>5:
    print (i)
    “`

  • 資深大佬 : AX5N

    @AX5N 打错,应该是 if i[0]……………….

  • 資深大佬 : nuistzhou

    我猜主随机的意思是从所有“行”里挑出满足这些“列”条件的。这玩意 SQL 或者 Pandas 很快解决的

  • 主 資深大佬 : L4Liiyooooo

    @jstony 一开始我是想设计一个可以随机输出一个满足条件的组合的程序。。。

  • 主 資深大佬 : L4Liiyooooo

    @Counter 谢谢
    大佬们求问一下 我有一个需求 Python 能实现吗?
    这是我编辑的一个示例 就是 A,B,C,D,E 都有一个标准值(肯定大于单独一行的数值)
    然后任意行相加 大于或等于标准值 即为一种组合 比如 a+b,a+c+d 等等
    我想找出所有的组合

  • 資深大佬 : aloxaf

    只出现一次的话,直接穷举不就行了。。。

  • 資深大佬 : flamehaze

    没太看懂,但是我隐约觉得 excel 自带的功能就能完成,excel 里也能编程的。

  • 資深大佬 : volvo007

    主的条件是,任意行相加大于标准值就可以
    但是主想过没有,你现在有 200 行……要打印出所有的组合你算过有多少种吗……说得轻巧啊……最坏情况可是 200 ! 200 的阶乘啊……

    我建议你找到一个满足条件的就收手,全打印出来太天真了

    如果是随机提供行数,你这里 0-200 行选哪些行不确定,200 行里面每次选多少行出来也不确定,不过用两次随机数就可以了。用 np.random.randint(200) 可以生成一个 200 内的随机整数 N 作为需要相加的行数,用 np.random.choice(range(200), N) 就可以从 200 行当中不重复选出这随机的 N 行

    然后得到的行数是一个数组,可以用 df.iloc[ list, :].sum(axis=0) 算出这些随机行的每一列的和

    之后和你的标准值比较就可以了

    这个过程可以循环多次。我估计不到一秒就能找到其中的一个组合。你要把组合全打印出来我真劝你放弃……

  • 主 資深大佬 : L4Liiyooooo

    @volvo007 看明白了 是这么个事啊 厉害厉害 受教了! 感谢感谢!

  • 主 資深大佬 : L4Liiyooooo

    @volvo007 选哪些行都行 选多少行相加也可以 只要满足条件即可 我自己都没描述清楚!你帮我说清楚了 感谢!

  • 資深大佬 : aijam

    窃以为,考虑这个问题的满足(satisfaction)问题版本:判断是否存在任意一个行的组合,满足所有列的约束条件。可以很容易的 reduce 成 SAT 问题,所以可以肯定是一个 NP 问题。如此一来,基本只能靠一些 heuristics 来剪枝搜索空间了。

  • 資深大佬 : yongzhenchen682

    测试不能穷举,等价类划分一下

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具