algorithm - 在 Matlab 中彻底排列大小为 20 的向量

标签 algorithm matlab vector permutation

我试图彻底置换一个大小为 20 的向量,但是当我尝试使用 perms(v) 时,出现错误

  Error using perms (line 23)
  Maximum variable size allowed by the program is exceeded.

我从文档中了解到,长度超过 10 的向量所需的内存是天文数字。所以我正在寻找替代方案。

我正在尝试做的是以下内容(使用一个较小比例的示例,这里的矢量大小仅为 3 而不是 20)- 找到所有长度为 3 的矢量 x,其中 (x_i) ^2 = 1,例如

  (1, 1, 1), 
  (-1, 1, 1), (1, -1, 1), (1, 1, -1),
  (-1, -1, 1), (-1, 1, -1), (1, -1, -1),
  (-1, -1, -1) 

我试图迭代创建“基本向量”,其中“-1”元素的数量从 0 增加到 20,然后使用 perms(v) 来置换每个“基本向量” ,但我遇到了内存问题。

有没有其他方法可以做到这一点?

最佳答案

有 2^20 个这样的向量(大约 100 万个)。因此,您可以创建一个计数器在 0..2^20-1 范围内的循环,并将计数器值(二进制表示)映射到所需的向量(零位到 -1,一位到 +1,反之亦然)。简单映射公式:

Vector_Element = bit * 2  - 1

长度为 4 的示例:

 i=10 
 binary form  1  0 1  0
 +/-1 vector: 1 -1 1 -1 

关于algorithm - 在 Matlab 中彻底排列大小为 20 的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36515703/

相关文章:

algorithm - 井字游戏 AI 错误

java - 记录小于批量大小时的数据库批处理模式

php - 基于设备保护 PHP API

c++ - 低内存的内存管理 : finding and tracking duplicates of random function return values

algorithm - 在 MatLab 中实现 Neville 算法

matlab - 计算向量的最大值 "running"

matlab - 如何给客户一个matlab项目?

c++ - 大多维 vector 初始化C++

c++ - 我可以将 vector 转换为 OpenCv 矩阵吗?

c++ - std::vector::emplace_back 比 std::vector::push_back 慢的示例?