matlab中向量的连续元素

Consecutive elements of a vector in matlab

我正在尝试显示向量(在本例中为向量 x)的 n 个连续数字的某些值。

x = [1
     1
     1
     1
     1
     1
     0
     0
     0
     0
     1
     1
     0
     0
     0
     0
     0
     0
     1
     0
     1
     0
     1
     0
     1
     0
     1
     1
     0
     0
     1
     1
     1
     1
     1
     1
     0
     0
     1
     1
     1
     1
     0
     0
     1
     1
     1
     1
     1
     1
     0
     0
     0
     0
     0
     1
     0
     0
     1
     0
     0
     0
     0
     1
     0
     0
     1
     0
     1
     0
     0
     0
     1
     0
     0
     0
     0
     1
     0
     1
     0
     0
     1
     0
     0
     0
     0
     1
     1
     0
     0
     0
     1
     0
     0
     0
     0
     0
     0
     1
     0
     1
     0
     0
     0
     0
     1
     0
     1
     0
     0
     0
     1
     0
     0
     0
     0
     0
     0
     1
     0
     0
     0
     1
     0
     0
     1
     1
     1
     1
     1
     1
     0
     0
     1
     1
     0
     0
     1
     0
     1
     0
     0
     0
     0
     0
     0
     1
     0
     1
     0
     0];

例如,我可能想要 4 个连续数字的前 3 个值(每个 4 位的 3 个值):

1111
1100
0011

我可能想要 2 个连续数字的前 4 个值(每个 2 位的 4 个值):

11
11
11
00

x 是双数组。实现此目标的简单方法是什么?

最简单的方法是将 x 重塑为一个矩阵,每个值所需的位数作为行数(MATLAB 是 column-major)。例如,要获取 4 位数的值:

t = reshape(x,4,[]);

这仅在 x 的长度被平均分为 4 时才有效。您可以先将 x 裁剪为正确数量的元素,以避免长度不能被平均分割的错误:

t = reshape(x(1:4*3),4,[]);

现在转置矩阵 t,转换为字符串,看起来像您想要的输出:

c = char(t.' + '0');

输出是一个 3x4 字符数组:

    '1111'
    '1100'
    '0011'

您可以使用 bin2dec:

将这些二进制表示转换回数字
b = bin2dec(c);

输出是一个 3 元素双向量:

    15
    12
     3