Python元素-wise求和和连续次数约束

我的数据如下所示。

    a = [10, 11, 12, 13, 14]    b = [15, 16, 17, 18, 19]    c = [20, 21, 22, 23, 24]
  1. 我想检查每个列表中第i个元素的和,即按元素求和是否大于50,其中i = [0, 1, 2, 3, 4]。
  2. 我也想检查这个和是否连续三次大于50。

在Python中,有没有办法将此作为约束满足问题来解决?

我尝试了以下方法(使用这个CSP模块:https://labix.org/python-constraint),但这会打印出每个列表中所有可能值的组合,但我想要的是按元素求和。

    from constraint import *    problem = Problem()    problem.addVariable("a", [10, 11, 12, 13, 14])    problem.addVariable("b", [15, 16, 17, 18, 19])    problem.addVariable('c', [20, 21, 22, 23, 24])    problem.addConstraint(lambda a,b,c: a+b+c>50, ("a","b","c"))    for x in problem.getSolutions():        print x

结果(共72个答案)

    {'a': 14, 'c': 24, 'b': 19}    {'a': 14, 'c': 23, 'b': 19}    {'a': 14, 'c': 22, 'b': 19}    .    .    .    {'a': 10, 'c': 24, 'b': 18}    {'a': 10, 'c': 24, 'b': 17}

所需答案:

    {'a': 12, 'c': 22, 'b': 17}    {'a': 13, 'c': 23, 'b': 18}    {'a': 14, 'c': 24, 'b': 19}

另外,我该如何添加一个约束来检查和连续大于50的次数?

我明白我可以使用lambda函数来实现,但如果可能的话,我想使用CSP库,因为以后可能会有更多的约束,并且每个列表的数量和每个列表中的元素数量可能会达到数千。

    a = [10, 11, 12, 13, 14]    b = [15, 16, 17, 18, 19]    c = [20, 21, 22, 23, 24]    z = zip(a, b, c)    print map(lambda (x,y,z): x+y+z>50, z)

回答:

我建议你研究一下itertools.groupby。例如,以下是一些代码,可以找到并统计连续列的和大于50的次数。

from itertools import groupbya = [10, 11, 12, 13, 14]b = [15, 16, 17, 18, 19]c = [20, 21, 22, 23, 24]data = [a, b, c]def keyfunc(t):    return sum(t) > 50for k, g in groupby(zip(*data), keyfunc):    if k:        g = list(g)        print(g, len(g))

输出

[(12, 17, 22), (13, 18, 23), (14, 19, 24)] 3

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注