如何使用零作为填充来连接不同维度的矩阵?

时间:2015-04-16 19:53:22

标签: matlab matrix

我希望通过用“零”填充较短的矩阵来连接具有不同维度的矩阵。如何在for循环中做到这一点?

例如,我有一个名为x的数据集,它是一个(92x1)向量。我想通过删除连续的10行(92x1,82x1,72x1,62x1 ... 2x1)然后将所有生成的向量组合成一个具有9列的矩阵来多次截断此向量。

我使用了代码:

CN_trunc = zeros(92, 9);
for i = 1:9
    CN_trunc(:,:) = x(1:(92 - i*10), 1));
end

我一直收到Subscripted assignment dimension mismatch错误。我如何能够连续删除矢量中的行,然后将它们全部连接成一个矩阵?

2 个答案:

答案 0 :(得分:6)

基于bsxfunvectorized解决方法怎么样?

%// Sample Input and cutting/deleting length
x = rand(12,1) %// For your actual problem x would be of length 92
cutlen = 5;    %// Edit this to 10 for your stated problem

lens = numel(x):-cutlen:1;
out = bsxfun(@times,bsxfun(@ge,lens,[1:max(lens)]'),x(:))

示例运行 -

x =
    0.6679
    0.6035
    0.5261
    0.7297
    0.7073
    0.7814
    0.2880
    0.6925
    0.5567
    0.3965
    0.0616
    0.7802
out =
    0.6679    0.6679    0.6679
    0.6035    0.6035    0.6035
    0.5261    0.5261         0
    0.7297    0.7297         0
    0.7073    0.7073         0
    0.7814    0.7814         0
    0.2880    0.2880         0
    0.6925         0         0
    0.5567         0         0
    0.3965         0         0
    0.0616         0         0
    0.7802         0         0

答案 1 :(得分:2)

您可以使用以下简单解决方案

CN_trunc = zeros(92, 10);
for i = 1:10
    CN_trunc(1:(92 - (i-1)*10),i) = x(1:(92 - (i-1)*10));
end