对任意数量的数组的所有可能组合求和并应用限制并返回索引

2024-07-03

这是一个修改这个问题 https://stackoverflow.com/questions/40410766/summing-all-possible-combinations-of-an-arbitrary-number-of-arrays-and-applying除了元素本身之外,我还想返回数组元素的索引。我已经修改成功了arraysums(), arraysums_recursive(),但我正在挣扎arraysums_recursive_anyvals()。详细信息如下:

我修改了arraysums():

def arraysums(arrays,lower,upper):
    products = itertools.product(*arrays)
    result = list()

    indices = itertools.product(*[np.arange(len(arr)) for arr in arrays])
    index = list()

    for n,k in zip(products,indices):
        s = sum(n)
        if lower <= s <= upper:
            result.append(n)
            index.append(k)                
    return result,index

现在它返回元素和元素的索引:

N = 8
a = np.arange(N)
b = np.arange(N)-N/2    
arraysums((a,b),lower=5,upper=6)


([(2, 3),
  (3, 2),
  (3, 3),
  (4, 1),
  (4, 2),
  (5, 0),
  (5, 1),
  (6, -1),
  (6, 0),
  (7, -2),
  (7, -1)],
 [(2, 7),
  (3, 6),
  (3, 7),
  (4, 5),
  (4, 6),
  (5, 4),
  (5, 5),
  (6, 3),
  (6, 4),
  (7, 2),
  (7, 3)])

我还修改了 @unutbu 的递归解决方案,它也返回与arraysums():

def arraysums_recursive(arrays, lower, upper):
    if len(arrays) <= 1:
        result = [(item,) for item in arrays[0] if lower <= item <= upper]
        index = []   # this needs to be fixed
    else:
        result = []
        index = []
        for item in arrays[0]:
            subarrays = [[item2 for item2 in arr if item2 <= upper-item] 
                      for arr in arrays[1:]]
            result.extend(
                [(item,)+tup for tup in arraysums(
                    subarrays, lower-item, upper-item)[0]])
            index.extend(
                [(item,)+tup for tup in arraysums(
                    subarrays, lower-item, upper-item)[1]])

    return result,index

最后我修改了arraysums_recursive_anyvals(),但我似乎无法理解为什么它不返回索引:

def arraysums_recursive_anyvals(arrays, lower, upper):
    if len(arrays) <= 1:
        result = [(item,) for item in arrays[0] if lower <= item <= upper]
        index = []   # this needs to be fixed
    else:
        minval = min(item for arr in arrays for item in arr)
        # Subtract minval from arrays to guarantee all the values are positive
        arrays = [[item-minval for item in arr] for arr in arrays]
        # Adjust the lower and upper bounds accordingly
        lower -= minval*len(arrays)
        upper -= minval*len(arrays)

        result = []
        index = []
        for item in arrays[0]:
            subarrays = [[item2 for item2 in arr if item2 <= upper-item] 
                      for arr in arrays[1:]]
            if min(len(arr) for arr in subarrays) == 0:
                continue
            result.extend(
                [(item,)+tup for tup in arraysums_recursive(
                    subarrays, lower-item, upper-item)[0]])
            index.extend(
                [(item,)+tup for tup in arraysums_recursive(
                    subarrays, lower-item, upper-item)[1]])

        # Readjust the result by adding back minval
        result = [tuple([item+minval for item in tup]) for tup in result]
    return result,index

results:

arraysums_recursive_anyvals((a,b),lower=5,upper=6)

([(2, 3),
  (3, 2),
  (3, 3),
  (4, 1),
  (4, 2),
  (5, 0),
  (5, 1),
  (6, -1),
  (6, 0),
  (7, -2),
  (7, -1)],
 [])

一个关键特征是arraysums_recursive是它抛出了不可能对结果有贡献的值:

subarrays = [[item2 for item2 in arr if item2 <= upper-item] 
              for arr in arrays[1:]]

虽然扔掉一些东西会使索引的记录变得复杂,但这并不太难。 首先,在arraysums_recursive扩张arrays包括索引以及项目值:

def arraysums_recursive(arrays, lower, upper):
    arrays = [[(i, item) for i, item in enumerate(arr)] for arr in arrays]
    ...
    index, result = zip(*arraysums_recursive_all_positive(arrays, lower, upper))
    return result, index

现在重写arraysums_recursive_all_positive处理arrays其中包含一系列列表(index, item) tuples.


def arraysums_recursive(arrays, lower, upper):
    arrays = [[(i, item) for i, item in enumerate(arr)] for arr in arrays]
    minval = min(item for arr in arrays for i, item in arr)
    # Subtract minval from arrays to guarantee all the values are positive
    arrays = [[(i, item-minval) for i, item in arr] for arr in arrays]
    # Adjust the lower and upper bounds accordingly
    lower -= minval*len(arrays)
    upper -= minval*len(arrays)
    index, result = zip(*arraysums_recursive_all_positive(arrays, lower, upper))
    # Readjust the result by adding back minval
    result = [tuple([item+minval for item in tup]) for tup in result]
    return result, index

def arraysums_recursive_all_positive(arrays, lower, upper):
    # Assumes all values in arrays are positive
    if len(arrays) <= 1:
        result = [((i,), (item,)) for i, item in arrays[0] if lower <= item <= upper]
    else:
        result = []
        for i, item in arrays[0]:
            subarrays = [[(i, item2) for i, item2 in arr if item2 <= upper-item] 
                         for arr in arrays[1:]]
            if min(len(arr) for arr in subarrays) == 0:
                continue
            result.extend(
                [((i,)+i_tup, (item,)+item_tup) for i_tup, item_tup in 
                 arraysums_recursive_all_positive(subarrays, lower-item, upper-item)])
    return result

import numpy as np
N = 8
a = np.arange(N)
b = np.arange(N)-N/2    
result, index = arraysums_recursive((a,b),lower=5,upper=6)

yields result:

[(2.0, 3.0),
 (3.0, 2.0),
 (3.0, 3.0),
 (4.0, 1.0),
 (4.0, 2.0),
 (5.0, 0.0),
 (5.0, 1.0),
 (6.0, -1.0),
 (6.0, 0.0),
 (7.0, -2.0),
 (7.0, -1.0)]

and index:

((2, 7),
 (3, 6),
 (3, 7),
 (4, 5),
 (4, 6),
 (5, 4),
 (5, 5),
 (6, 3),
 (6, 4),
 (7, 2),
 (7, 3))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对任意数量的数组的所有可能组合求和并应用限制并返回索引 的相关文章

  • 如何在运行时创建对象?

    我需要在运行时创建一个类的多个不同对象 这个数字也是在运行时确定的 就像我们在运行时得到 int no o objects 10 一样 然后我需要实例化一个类10次 Thanks 阅读Java 教程中的数组 http java sun co
  • 使用 bs4 进行 HTML 解析

    我正在解析一个 HTMl 页面 并且很难弄清楚如何在没有类或 id 的情况下提取某个 p 标签 我试图用经纬度到达 p 标签 这是我当前的代码 import bs4 from urllib import urlopen as uReq th
  • networkx - 根据列表或字典值更改节点大小

    我正在尝试在networkx中制作一个图表 我在为节点分配不同的节点大小时遇到 问题 这是我一直在玩的代码 import sys from collections import defaultdict import networkx as
  • 如何在 Python 3 中使用 smtplib.sendmail() 对收件人姓名(而不是地址)中的国际字符进行编码?

    我在 Python 3 程序中使用标准 smtplib sendmail 调用来发送电子邮件 如下所示 smtp session sendmail The Sender lt email protected cdn cgi l email
  • 如何使用Python读取MP3中的ID3标签? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人有在 MP3 文件或 WMA 文件中读写 ID3 标签的经验吗 有一些库 但我想从头开始 深入Python https web a
  • 从子列表中切片元素 - Python

    我想从中返回数字 5 list 1 1 2 3 4 5 6 我以为这会起作用 但事实并非如此 print list 1 1 1 它返回一个空列表 它是索引 1 第二个列表 和位置 1 列表中的第二个数字 这不应该起作用吗 您需要两个单独的操
  • 熊猫读_csv。如何忽略换行符之前的分隔符

    我正在读取一个包含数值的文件 data pd read csv data dat sep header None 在文本文件中 每行以空格结尾 因此 pandas 等待不存在的值 并在每行末尾添加一个 nan 例如 2 343 4 234
  • Python将html ascii编码文本转换为utf8

    我有一个 xml 文件 需要将其转换为 utf8 不幸的是 这些实体包含这样的文本 047 mytext 044 我正在使用编解码器库将文件转换为 utf8 但 html 实体无法使用它 有没有一种简单的方法可以摆脱html编码 Thank
  • 嵌入式Python,导入数学错误

    首先我使用的是 Mac OSX 10 12 6 我想在我的 C 应用程序中嵌入 python 环境 我把 github python 项目放在https github com python cpython https github com
  • 使用 python 将数据复制到 Vertica

    I use python and vertica python图书馆到COPY数据到Vertica DB connection vertica python connect conn info vsql cur connection cur
  • 添加 prefix_with 子句以插入特定类

    我怎样才能定制prefix withSQLAlchemy 中的每个模型类 以便每个模型类都可以有不同的插入语句 我其实想要OR IGNORE子句添加到某些类中 PS 我对 SQLAlchemy 比较陌生 ORM 没有挂钩它的生成方式inse
  • 如何对不同类型的列表进行排序?

    我需要使用 python 3 对列表进行排序 可能有strings integers floats or tuples etc 我目前正在尝试正确使用sort函数使用key参数如下 data sort key gen key def gen
  • SWIG Python 结构体数组

    我已经搜索了几天 试图弄清楚如何将结构数组转换为 Python 列表 我有一个函数返回指向数组开头的指针 struct foo int member struct foo bar struct foo t malloc sizeof str
  • OpenCV 图像处理——C++、C、Python

    我正在考虑在一个项目中尝试 OpenCV 并注意到它有 C C 和 Python 我正在尝试确定是否应该使用 C C 还是 Python 并且希望使用具有最佳 OpenCV 支持的任何语言 仅从查看各种文档的索引页来看 C 绑定可能比其他绑
  • Django 会话竞争条件?

    摘要 Django 会话中是否存在竞争条件 如何防止它 我在 Django 会话方面遇到了一个有趣的问题 我认为该问题涉及由于同一用户同时发出请求而导致的竞争条件 它发生在一个同时上传多个文件的脚本中 正在本地主机上进行测试 我认为这使得同
  • Python:汇总和聚合 DataFrame 中的组和子组

    我正在尝试构建一个表 其中的组按子组划分 并包含每个子组的计数和平均值 例如 我想转换以下数据框 到一个看起来像这样的表 其中interval是一个更大的组和列a thru i成为组内的子组 每个单元格中具有相应子组的计数和平均值 我尝试过
  • 无法在 Debian lenny 上安装 python 模块“pycrypto”

    我尝试通过下载源代码并执行以下命令来安装 pycrypto 模块python setup py install 然后出现错误 running install running build running build py running bu
  • 使用 setuptools 从私有 Gitlab 包存储库安装 Python 包

    我为我的雇主创建了一个私人套餐 由于我被禁止将其上传到 PyPI 它是专有的 因此我将其上传到我们私人 Gitlab 中心上的项目的包索引中 我可以手动安装它 pip install my package extra index url h
  • Numpy“shape”函数返回 2D 数组的 1D 值

    所以我创建了这个数组作为示例 a np array 1 1 1 1 2 2 2 2 3 3 3 3 4 13 49 13 49 10 10 2 2 11 1 1 1 2 22 2 2 3 33 3 3 4 133 49 13 49 100
  • 在Python中返回外部函数错误

    这就是问题 给定以下 Python 程序 假设用户从键盘输入数字 4 返回的值是多少 N int input enter a positive integer counter 1 while N gt 0 counter counter N

随机推荐

  • Tidyr 的 Gather() 与 NA

    我在用tidyr and lubridate将宽表转换为长表 以下效果很好 gt df lt data frame hh id 1 2 bday 01 ymd 20150309 bday 02 ymd 19850911 bday 03 ym
  • 以编程方式将 ButtonColumn 从 DataTable 添加到 GridView

    我在 GridView 中添加带有按钮的列时遇到问题 从下面的代码中可以看出 GridView 的数据源是 DataTable 我需要使用按钮向表中添加一个附加列 从下面的代码中 我收到一条错误消息 System Windows Forms
  • Web 应用程序的多个服务器如何同步工作?

    我的第一个问题是 我经常读到人们使用多个专用服务器来运行他们的网站并处理用户的查询 但他们究竟是如何做到这一点的呢 我的意思是 当我输入域名时 DNS 会将其映射到 IP 地址 但在那之后我就迷失了 是否有某种主 从架构可以在 可能 数百个
  • echo php foreach 循环结果为 3 列

    我有一个 foreach 循环 我的代码看起来是这样的 foreach items as item echo item title 例如 我的循环中有 15 个项目 我的循环将输出如下内容 item 1 item 2 item 3 item
  • 在 laravel 5.5 中包含 node_modules 的简单方法

    如何在 laravel 5 5 应用程序中包含 node modules 我引用了这个https laravel com docs 5 5 mix https laravel com docs 5 5 mix 我可以做这个 npm inst
  • Angular2 - app.module 路由:空白路径未重定向到组件

    我已向我的应用程序添加了登录功能 当有人导航到路径为空的 URL 时 http example com http example com 我希望显示 HomeComponent 这将激活 AuthGuard 但将 URL 路径保留为空 我仍
  • 为什么构造函数要改变?

    为什么添加原型后构造函数从 Foo 变成了 Object 我怎样才能访问原始构造函数 Code function Foo var foo1 new Foo console log foo1 foo1 constructor Foo prot
  • 无法保护 Spring boot 管理执行器端点

    我正在尝试保护 Spring Boot 执行器端点 我的工作安全 apiREST 接口 但尝试在内置端点上添加安全性似乎不起作用 我已经在我的中设置了端点分组application properties management context
  • 将元素添加到向量末尾

    斯卡拉文档 http www scala lang org api current index html scala collection immutable Vector解释如何向 Vector 添加元素 def elem A Vecto
  • slurm 中的作业数组规范无效

    我正在 slurm 中提交一份玩具阵列作业 我的命令行是 sbatch p development t 0 30 0 n 1 a 1 2 j1 其中 j1 是脚本 bin bash echo job id is SLURM JOB ID e
  • Graphviz - 绘制最大派系

    我想使用 graphviz 来绘制给定图表的所有最大派系 因此 我希望同一最大集团中的节点在视觉上封装在一起 这意味着我希望有一个大圆圈围绕它们 我知道集群选项存在 但在我迄今为止看到的所有示例中 每个节点仅位于一个集群中 在最大派系情况下
  • 阻止人们在多个选项卡上加载我的网站

    我希望用户能够浏览我的网站only浏览器中的一个选项卡 如何才能做到这一点 我会使用 javascript 和 cookies 吗 例如 我有一个网站 www example com 我希望我的客户只能从一个浏览器的一个选项卡访问该网站 如
  • Spring JSON直接自引用导致循环(无限递归)

    我正在使用 Spring Framework 和 Hibernate 编写一个简单的 Spring MVC REST Web 服务 我想序列化以下简单的用户实体 伪代码 Entity public class UserEntity impl
  • 从深度嵌套的目录结构导入模块

    导入不在同一文件夹中或周围的模块是相当麻烦的 你必须不断地数 就像下面的例子一样 import AnswersService AddAnswerModel Answer from BackendServices AnswersService
  • 如何在 Google Chrome 上修复 1px 边距?

    这是一个例子http jsbin com oqisuv http jsbin com oqisuv CSS body background e7ebf2 url http i imgur com R2VB6 png center repea
  • Python 中的 Pandas 和 NumPy+SciPy 有什么区别? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 他们俩看起来非常类似 我很好奇哪个包对财务数据分析更有利 pandas 提供了构建在 NumPy 之上的高级数据操作工具 NumPy 本身是一个
  • ActionScript 事件处理程序执行顺序

    我一直试图理解 ActionScript 事件的实现方式 但我陷入了困境 我知道 AS 是单线程的 这意味着一次只会执行一个事件处理程序 也意味着处理程序将以确定的顺序执行 例如 考虑以下代码 1 var x executed false
  • django外键包含查询

    我有以下型号 class Command models Model server models ForeignKey Server user login models CharField max length 100 user run mo
  • val() 不会触发 jQuery 中的change()

    我正在尝试触发change当我使用按钮更改文本框的值时 它会在文本框中发生事件 但它不起作用 查看这把小提琴 https jsfiddle net ergec 9z7h2upc 如果您在文本框中输入内容并单击其他位置 change被触发 但
  • 对任意数量的数组的所有可能组合求和并应用限制并返回索引

    这是一个修改这个问题 https stackoverflow com questions 40410766 summing all possible combinations of an arbitrary number of arrays