如何生成在 1×41 向量中定位 20 个 -1 值的每个排列?

2023-12-11

我编写了不同的代码来生成 1 和减 1 的不同排列。它们适用于小尺寸矩阵:

例如:

S=[-1 -1 1 1 1 1 1 1];
P=unique(perms(S),'rows');

产生:

-1  -1   1   1   1   1   1   1
-1   1  -1   1   1   1   1   1
-1   1   1  -1   1   1   1   1
-1   1   1   1  -1   1   1   1
-1   1   1   1   1  -1   1   1
-1   1   1   1   1   1  -1   1
-1   1   1   1   1   1   1  -1
 1  -1  -1   1   1   1   1   1
 1  -1   1  -1   1   1   1   1
 1  -1   1   1  -1   1   1   1
 1  -1   1   1   1  -1   1   1
 1  -1   1   1   1   1  -1   1
 1  -1   1   1   1   1   1  -1
 1   1  -1  -1   1   1   1   1
 1   1  -1   1  -1   1   1   1
 1   1  -1   1   1  -1   1   1
 1   1  -1   1   1   1  -1   1
 1   1  -1   1   1   1   1  -1
 1   1   1  -1  -1   1   1   1
 1   1   1  -1   1  -1   1   1
 1   1   1  -1   1   1  -1   1
 1   1   1  -1   1   1   1  -1
 1   1   1   1  -1  -1   1   1
 1   1   1   1  -1   1  -1   1
 1   1   1   1  -1   1   1  -1
 1   1   1   1   1  -1  -1   1
 1   1   1   1   1  -1   1  -1
 1   1   1   1   1   1  -1  -1

or

indices = nchoosek(1:41, 6);
N = size(indices, 1);
S = ones(N, 41);
S(sub2ind([N 41], [1:N 1:N 1:N 1:N 1:N 1:N].', indices(:))) = -1;

可以生产 4496388_by_41 的矩阵,包含 6 减一(-1) 和 35 1(1) 的所有排列。

这些代码适用于较小尺寸的矩阵,但不适用于较大尺寸的矩阵。

我的目标是生成 20 减一(-1) 和 21 减一(1) 的所有排列,该矩阵有 269128937220 行和 41 列。但以下代码不起作用:

indices = nchoosek(1:41, 20);
N = size(indices, 1);
S = ones(N, 41);
S(sub2ind([N 41], [1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N 1:N].', indices(:))) = -1;

or

S=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
P=unique(perms(S),'rows');

我对每个排列(该矩阵的每一行)进行简单的计算。如果我可以用 for 循环编写该矩阵的每一行,然后对该行进行计算,我将能够保持最佳结果,在这种情况下,我不必将所有这些数据保留在内存中,我将不会出现 matlab 内存不足错误。

如果您知道如何使用 for 循环或任何其他方式将 20 减 1(-1) 和 21 1(1) 的所有排列生成一个矩阵,或者以任何其他方式将它们存储在我的计算机中,请提供帮助。

提前致谢


我不是这方面的专家Matlab所以我不能代表所有可用的资源,但是,我知道您的任务在标准笔记本电脑上是可行的,无需任何花哨的高性能服务,例如https://aws.amazon.com/hpc/.

我已经编写了一个包R called RcppAlgos能够在几个小时内轻松完成这项任务。这是代码:

options(scipen = 999)
library(parallel)
library(RcppAlgos)

## WARNING Don't run this unless you have a few hours on your hand

## break up into even intervals of one million
firstPart <- mclapply(seq(1, 269128000000, 10^6), function(x) {
    temp <- permuteGeneral(c(1L,-1L), freqs = c(21,20), lower = x, upper = x + 999999)
    ## your analysis here
    x
}, mc.cores = 8)

## get the last few results and complete analysis
lastPart <- permuteGeneral(c(1L, -1L), freqs = c(21, 20), 
                           lower = 269128000000, upper = 269128937220)
## analysis for last part goes here

为了向您展示此设置的效率,我们将演示完成前 10 亿个结果的速度。

system.time(mclapply(seq(1, 10^9, 10^6), function(x) {
    temp <- permuteGeneral(c(1L, -1L), freqs = c(21, 20), lower = x, upper = x + 999999)
    ## your analysis here
    x
}, mc.cores = 8))

   user  system elapsed 
121.158  64.057  27.182

30 秒内获得 1000000000 个结果!!!!!!!

因此,正如 @CrisLuengo 计算的那样,这不会花费超过 3000 天,而是保守估计每十亿需要 30 秒:

(269128937220 / 1000000000 / 60) * 30 ~= 134.5645 minutes

我还应该注意,通过上面的设置,您仅使用1251.2 Mb一次,这样你的记忆就不会爆炸。

testSize <- object.size(permuteGeneral(c(1L,-1L), freqs = c(21,20), upper = 1e6))
print(testSize, units = "Mb")
156.4 Mb ## per core

所有结果均在 MacBook Pro 2.8GHz 四核(有 4 个虚拟核心……总共 8 个)上获得。

Edit:

正如 @CrisLuengo 指出的,上面的方法仅测量生成那么多排列,并没有考虑分析每次计算所花费的时间。经过更多澄清和新问题后,我们得到了answer现在...大约2.5天!

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

如何生成在 1×41 向量中定位 20 个 -1 值的每个排列? 的相关文章

  • 如何获得n个具有不同元素数量的数组的所有可能组合?

    我有一些在编程时未知的数组数量 也许是 3 或 4 或 7 每个数组都有一些元素 即 a 1 2 3 4 b 6 7 5 2 1 c 22 4 6 8 4 8 5 4 d e f g 我想通过从每个数组中采样一个数字来获得所有可能的组合 例
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • jQuery mousemove 性能 - 节流事件?

    我们面临着与 mousemove 连接的 jQuery 事件传播性能问题 我们有一个屏幕填充画布 需要跟踪用户是否在其上拖动鼠标 因此我们在该对象上添加了一个鼠标移动侦听器 如下所示 ourCanvas on mousemove funct
  • 隐藏类以及 {} 对象与自定义构造函数之间的等效性 (v8)

    鉴于这篇文章 http richardartoul github io jekyll update 2015 04 26 hidden classes html http richardartoul github io jekyll upd
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标
  • 对数据进行分布拟合 - MATLAB

    我正在尝试对从显微镜图像中收集的一些数据进行分布 我们知道 152 左右的峰值是由于泊松过程造成的 我想将分布拟合到图像中心的大密度 同时忽略高强度数据 我知道如何将正态分布拟合到数据 红色曲线 但它不能很好地捕获右侧的重尾 尽管泊松分布应
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 在工作表中合并行和求和值

    我有一个 Excel 工作表 其中包含以下数据 管道 来分隔列 A B C X 50 60 D E F X 40 30 A B C X 10 20 A B C Y 20 20 A B C X 20 70 D E F X 10 50 A B
  • 为什么 Python 中的无分支函数和内置函数速度较慢?

    我发现了 2 个无分支函数 它们可以在 python 中查找两个数字的最大值 并将它们与 if 语句和内置 max 函数进行比较 我认为无分支或内置函数将是最快的 但最快的是 if 语句函数 有人知道这是为什么吗 以下是功能 If 语句 2
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • 优化我的表现

    我正在开发一个使用 Zend Framework 1 11 Doctrine 2 一些 Symfony 2 组件以及其他工具和库的项目 我正在尝试使用 Xdebug 和 Webgrind 优化性能 我已经发现了一些瓶颈 例如解析 Ini 配
  • 从排列生成器中随机选择?

    如何随机挑选所有结果 一一 不重复 itertools permutations k 或者这个 如何构建随机排列生成器 就像是shuffle permutations k 我正在使用Python 2 6 Yeah shuffle r 可以使
  • 如何在 MATLAB 中绘制纹理映射三角形?

    我有一个三角形 u v 图像中的坐标 我想在 3D 坐标处绘制这个三角形 X Y Z 与图像中的三角形进行纹理映射 Here u v X Y Z都是具有三个元素的向量 代表三角形的三个角 我有一个非常丑陋 缓慢且令人不满意的解决方案 其中我
  • MATLAB 列含义的内存分析

    我正在使用 MATLAB 配置文件来使用命令观察内存 profile memory on profile clear my code profile report and i got this table 1 我想问一下什么意思 已分配内存
  • 如何知道Matlab中系统命令执行过程中经过的时间?

    我有一个运行系统脚本的 Matlab 代码 该脚本可能会因命令运行而停止 我想知道是否有一种方法可以让程序知道它是否花费了很长时间并执行其他操作 这是代码 tic status cmdout system iperfcmd The prog
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • SignalR 似乎正在减慢我的 MVC/Azure 应用程序的启动速度

    我有一个 MVC 应用程序在 Windows Azure 上的 WebRole 上的 NET 4 5 下运行 使用 SignalR 1 0 alpha2 并使用 ServiceBus 底板 在我的 App Start 文件夹中 我有 Reg
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht

随机推荐

  • Android 64k 方法限制 56k 方法错误

    我在我的 Android 项目中收到此错误 Unable to execute dex method ID not in 0 0xffff 65536 Conversion to Dalvik format failed Unable to
  • 保存/恢复打印机 DevModes - wxPython / win32print

    到目前为止 我已经找到了两种不同的方法来从 wxPython 用户界面访问我认为等效版本的打印机 DevMode window wx GetTopLevelWindows 0 GetHandle name self itemMap devi
  • 交换浮点数和双精度数的“字节顺序”

    我想切换 float 和 double 值的 字节顺序 它可以通过执行以下操作来正常工作 float const v 1 f swap reinterpret cast lt std uint32 t const gt v 是否存在更好的方
  • 如何防止用户在ajax请求中通过firebug更改变量

    我允许我的用户收藏更新或论坛主题 因此 当用户尝试收藏其中之一时 我将通过 Ajax 2 发送内容 item id 更新或主题 作为 id 例如 1321313213 其类型 更新 或 主题 作为字符串 然而 假设有人尝试收藏某个更新 且
  • 清除Android ListView

    我有一个列表视图 我想动态更改列表视图的内容 我使用了 adapter notifyDataSetChanged 更改内容 我也尝试将列表视图的适配器设置为 null 但仍然得到相同的结果 它令人耳目一新 但不会清除列表视图 而是将其附加到
  • 从表中删除数据后Oracle释放空间

    我最近从数据库中的一些表中删除了大量数据 现在我希望释放该数据所占用的空间 之后我想重建索引 释放空间的最佳方法是什么 释放空间 是什么意思 当您删除数据时 块中的空间被释放 该空间现在可用于在您从中删除数据的表中进行后续插入 或更新 这通
  • Birt mongodb 参数

    我安装了 Birt 4 3 最新 作为 Eclipse 插件 JDBC 作为数据源非常适合我 我在查询中定义了一个参数 我可以通过报表设计在数据集中定义参数并将其链接到报表参数 但我对 MongoDB 有多个问题 1 当我打开 编辑数据集
  • 已声明但未设置的变量计算结果为 true?

    我正在用下面的代码做一个简单的计算器 现在它执行得很完美 然而 当我试图改变现状时 却行不通 我用了BOOL program检查是否继续询问该人的输入或完成该程序 如果我改变表达方式while声明只是 program 并改变YES NO i
  • CSS - 仅使用水平滚动条

    仅当 div 的内容长于宽度值时 我才需要使用水平滚动条 所以我写 viewgallerylist width 920px float left padding top 20px height 120px border bottom 1px
  • 如何正确处理从右到左的文本输入字段?

    我正在研究多语言布局 让我担心的是 如何正确处理文本输入 我已经建立了一个JSFiddle解释我的问题 如果我只是添加dir rtl 单词从右到左出现 但不是每个字符 如果我添加从右到左的 CSS 样式 包含的数字也会翻转 我如何组合数字和
  • 如何处理catch块中的异常?

    我正在尝试找到处理异常的理想方法 我用谷歌搜索并读到我应该放try catch in the catch块也可以处理 但是如果嵌套块本身发生任何异常怎么办 try int a 10 int b 0 int c a b Console Wri
  • OpenCV createsamples - 无效的背景描述文件

    我在我的OPENCV ROOT文件夹并在 Win x64 中运行以下命令 opencv createsamples bgcolor 0 bgthresh 0 maxxangle 1 1 maxyangle 1 1 maxzangle 0 5
  • 为什么在散列中向数组追加一个值也会修改分配它的其他变量?

    示例代码 hash of array a b hash of array c hash of array b a lt lt 1 puts b gt a 1 puts c gt a 1 为什么两个变量的数组中都有 1 我只将它附加到变量上b
  • 存储函数时如何传递预定义参数

    是否可以存储带有预定义参数的函数以供另一个函数调用 例如 def function num print num trigger function store function 1 trigger prints 1 trigger funct
  • 如何为 tts 创建自定义 sapi 语音

    我正在开发一个项目 需要为我的应用程序创建自定义语音引擎 我见过类似 TTS Builder 的东西 但是有人了解 TTS Builder 等应用程序本身是如何开发的吗 SAPI引擎背后的东西是什么 它们是如何工作的 一个人如何构建自己的
  • 如何使用AWS Lambda部署大型Python包?

    我需要一些建议 我使用 Tensorflow 训练了一个图像分类器 并希望使用它将其部署到 AWS Lambda无服务器 该目录包括模型 一些Python模块 包括tensorflow和numpy 以及Python代码 解压前完整文件夹的大
  • 如何在C++中获得不同向量的向量

    我想要一个 C 表示的表 如下所示 0 1 2 1 1 0 a 2 2 0 b 3 3 0 c 列的类型必须从int double or string在运行时 用 C 表达它的最佳方式是什么 附录 我真正的问题 我想要一个数据库表的列式表示
  • 在 DispatchTimer 中使用消息对话框时,Windows 8 应用程序中出现“访问被拒绝。(HRESULT 异常:0x80070005 (E_ACCESSDENIED))”?

    我正在尝试在调度计时器中使用消息对话框来在时间完成时更改用户 但有时会出现以下错误 访问被拒绝 HRESULT 异常 0x80070005 E ACCESSDENIED 如何解决这个问题 Code public DetailPage tim
  • 我们如何找到正在运行的Windows服务的进程ID?

    我正在寻找一种查找特定 Windows 服务的进程 ID 的好方法 特别是 我需要找到 Windows 附带的默认 WebClient 服务的 pid 它作为 svchost exe 进程中的 本地服务 托管 我发现当我使用 netstat
  • 如何生成在 1×41 向量中定位 20 个 -1 值的每个排列?

    我编写了不同的代码来生成 1 和减 1 的不同排列 它们适用于小尺寸矩阵 例如 S 1 1 1 1 1 1 1 1 P unique perms S rows 产生 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1