我希望通过用“零”填充较短的矩阵来连接具有不同维度的矩阵。如何在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
错误。我如何能够连续删除矢量中的行,然后将它们全部连接成一个矩阵?
答案 0 :(得分:6)
基于bsxfun
的vectorized
解决方法怎么样?
%// 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