horzcat different size rows; zero padding
15 次查看(过去 30 天)
显示 更早的评论
Hi,
I have 6 matrices; all are 7 columns. The number of rows is 12, 14, 16, 17, 17, 17. I want to pick off the first row from each and put them into one matrix.
I create a matrix of zeros that is the final size I need of (17,7), but when I run the following I get a 'CAT arguments dimensions are not consistent'.
A = zeros(17,7);
A = [B(:,1) C(:,1) D(:,1) E(:,1) F(:,1) G(:,1)];
The problem is that the first row does not keep the trailing zeros after the 12 cells are filled with the data. I don't understand why this happens. How can I concatenate these rows?
Thank you!
1 个评论
Oleg Komarov
2011-5-27
Not clear what are you trying to do.
Post the result of "whos" with B-G only in the workspace.
采纳的回答
Jan
2011-5-27
Preallocating A is useless here, because the 2nd line does not write into A, but overwrites A:
A = zeros(17,7); % Useless
A = [B(:,1) C(:,1) D(:,1) E(:,1) F(:,1) G(:,1)]; % Error!
Matt's solution works fine, but is not comfortable. Have you seen FEX: PADCAT? It pads the vectors with NaN's but they can replaced easily afterwards:
A(isnan(A)) = 0;
更多回答(2 个)
Matt Fig
2011-5-27
A = [1,2,3,4].';
B = [1 2 3 4 5 6].';
C = zeros(6,2);
C(1:length(A),1)= A % Fill first column with A
C(1:length(B),2)= B % Fill second column with B
0 个评论
Jan Siegmund
2020-5-18
编辑:Jan Siegmund
2020-5-18
If the input data is a cell array of column vectors, you might consider this:
a = {ones(5,1) ones(8,1)}; %test data
len = max(cellfun('length',a));
b = cellfun(@(x)[x;zeros(len-size(x,1),1)],a,'UniformOutput',false);
out = [b{:}]
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!