我试图彻底置换一个大小为 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/