如何生成在 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 值的每个排列? 的相关文章

  • .NET 程序集大小会影响性能吗?

    net 程序集的大小是否会影响性能 您的 Windows 窗体 Web 窗体项目中的程序集数量如何 来自微软的模式和实践提高 NET 应用程序性能和可扩展性 http msdn microsoft com en us library ms9
  • 为数据集生成随机 JSON 结构排列

    我想生成 JSON 结构的许多不同排列作为同一数据集的表示 最好不需要对实现进行硬编码 例如 给定以下 JSON name smith occupation agent enemy humanity nemesis neo 应该产生许多不同
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • 在 C++ 中转置矩阵

    我正在编写一个程序来使用分配的内存转置给定的矩阵 该函数对于方阵 NxN rows cols 可以完美工作 但对于 MxN 矩阵 rows cols 则崩溃 请帮忙 void transpose int matrix int row int
  • Mac OS X 中每个进程的磁盘读/写统计信息

    如何在 Mac OS X 中以编程方式获取每个进程的磁盘 I O 统计信息 在 活动监视器 应用程序或 top 命令中 我们只能获取整个系统磁盘 I O 统计信息 以供参考PC 上也有类似的问题 https stackoverflow co
  • dns-prefetch + 预连接与浏览器缓存

    为了提高页面加载时间 我想使用dns prefetch and preconnect对于外部 JavaScript 如果资源 在我的例子中是外部 javascript 已经在浏览器缓存中会发生什么 做dns prefetch and pre
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • AngularJS 与(Angular JS + jQuery)

    我有一个关于仅使用 AngularJS 和纯 JavaScript 以及使用 AngularJS 和 jQuery 时的性能问题 ex app directive fitHeight function window return restr
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 使用 scala 进行重复的所有排列

    我正在寻找 scala 方法来给出所有排列而不重复 我知道这个网站上已经有一些帖子 但它们似乎有一个稍微不同的问题 我正在寻找所有重复的排列 例如 combine List A C G 应该产生 List List A A A List A
  • 在 Actionscript-3 中优化 2D Flash 游戏的动态背景引擎

    编辑2 根据缺乏回复来判断 我开始怀疑我的问题是否足够清楚 请告诉我是否需要详细说明 注意 请参阅底部以获取代码更新 简短介绍 我正在用 ActionScript 编写一个二维 Flash 空间游戏 宇宙无限大 由于这个特性 背景必须动态渲
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 为什么循环引导迭代算法的数组大小必须为 3^k+1?

    The 循环引导迭代算法 http www geeksforgeeks org an in place algorithm for string transformation 是一种通过将所有偶数项移至前面并将所有奇数项移至后面同时保留其相
  • 尝试 Catch 性能 Java

    当捕获异常而不是进行检查时 try catch 需要多长时间 以纳秒为单位 假设消息具有用于查找的 HashMap 类型性能 try timestamp message getLongField MessageField TIMESTAMP
  • 整数与双精度算术性能?

    我正在编写一个 C 类来使用整数执行 2D 可分离卷积 以获得比双对应更好的性能 问题是我没有获得真正的性能提升 这是 X 过滤器代码 对于 int 和 double 情况都有效 foreach pixel int value 0 for
  • 如何限制 Android 设备网络速度以进行测试

    我正在测试一个 Android 应用程序 该应用程序在低质量网络上管理其内容时遇到一些问题 我无法验证问题是否仍然存在 因为以我家的网络速度 120mb s 在我设法开始复制路线之前 所有内容都已经下载完毕 在这种情况下 不能选择使用 An
  • Simulink 仿真引擎如何工作?

    我想了解 Simulink 仿真引擎的工作原理 它是否使用离散事件模拟机制 那么如何处理连续时间 它是否依赖于基于静态循环的代码生成 或者 在第一个周期之前 它会计算出块的执行顺序 从不需要任何其他块输入的块开始 每个周期 它都会根据输入和
  • 将代表扩展到矩阵?

    如果你打电话rep在矩阵上 它重复其元素而不是整个矩阵 传统的修复方法是调用rep list theMatrix 我想延长rep以便它自动执行此操作 我尝试使用 rep matrix lt function x rep list x 这确实

随机推荐

  • 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