将矢量交织并解交织为两个新矢量(MATLAB)

时间:2016-05-10 01:35:44

标签: matlab

交织器:假设我们有向量X= randi(1,N)我想将X的内容拆分为两个新的向量X1X2这样的X的第一个元素是X1的第一个元素,X2的第一个元素是X的第二个元素,X的第三个元素是X1的第二个元素,X的第四个元素是X2 ...的第二个元素,直到向量`X的最后一个元素。

我有以下想法

X1(1)=X(1);
X2(1)=X(2);


for i=1:length(X)
X1(i)= X(i+2);
end
for j=2:length (X)
X2(i)= X(i+2)
end

我的问题是:我的方法是否正确?有更好的方法吗?

解交织器 我也有相反的问题,所以基本上在这种情况下,我有X1X2并希望恢复X,我将如何有效地恢复X

由于

4 个答案:

答案 0 :(得分:3)

我认为这个问题的术语是相反的。交织是合并两个向量,交替改变它们的值:

x1 = 10:10:100;
x2 = 1:1:10;
x = [x1;x2];
x = x(:).';

这与单线纸一样:

x = reshape([x1;x2],[],1).';

David in a commentTom in an answer所建议的,去交织将分离交织的数据:

y1 = x(1:2:end);
y2 = x(2:2:end);

,但也可以通过许多其他方式来完成,例如反转上面我们遵循的过程:

y = reshape(x,2,[]);
y1 = y(1,:);
y2 = y(2,:);

要验证:

isequal(x1,y1)
isequal(x2,y2)

答案 1 :(得分:2)

我也希望有一些很酷的新衬板,但是无论如何,按照上一个答案,您可以为赋值使用相同的索引表达式。

x  = 1:20
x1 = x(1:2:end)
x2 = x(2:2:end)
y = zeros(20,1)
y(1:2:end) = x1
y(2:2:end) = x2

答案 2 :(得分:1)

我认为很难找到比这更清晰的解决方案:

x  = 1:20
x1 = x(1:2:end)
x2 = x(2:2:end)

答案 3 :(得分:1)

只需添加另一个选项,就可以使用deal函数和一些预先计算的索引。这基本上与the answer from Peter M相同,但是将分配收集到单行中:

X = randi(10, [1 20]);  % Sample data
ind1 = 1:2:numel(X);    % Indices for x1
ind2 = 2:2:numel(X);    % Indices for x2

[x1, x2] = deal(X(ind1), X(ind2));  % Unweave (i.e. deinterleave)

[X(ind1), X(ind2)] = deal(x1, x2);  % Interleave