Problem with vertically Concatenating vectors in a function
조회 수: 1 (최근 30일)
이전 댓글 표시
I have a cell array ABC containing three cells each cell contains a 1x1000 double. What I want is to put every double on top of each other in a column vector (nx1).
ABC={1x1000 cell
1x992 cell
1x928 cell);
My function looks like this:
nr=3;
s=1000;
[D]=func(nr,ABC,s);
function D = func(nr,ABC,s)
D = [];
for y =1:nr
data_length = length(ABC{y});
for o = 1:data_length
G((o-1)*s+1:o*s) = [ABC{y}{o} zeros(1,s-length(ABC{y}{o}))].';
end
D = [D; G.'];
end
end
My output should be D=2920000x1 double
But my output now is D=3000000x1 double
댓글 수: 0
채택된 답변
Stephen23
2021년 4월 28일
편집: Stephen23
2021년 4월 28일
Rather than using a loop, a much better use of MATLAB would be to use comma-separated lists:
For example:
out = cellfun(@(a)a(:),[ABC{:}],'uni',0);
out = vertcat(out{:})
Or
out = [ABC{:}];
out = [out{:}].'
댓글 수: 2
Stephen23
2021년 4월 28일
"Since every element is a double of 1x1000..."
Lets check that first. Show the output of these commands:
vec = cellfun(@numel,[AAG{:}]);
find(vec~=1000)
추가 답변 (1개)
DGM
2021년 4월 27일
% a cell array of numeric row vectors
A = {1:3,10:14,1:5}
% all row vectors concatenated into a col vector
bigcolvec = [A{:}]'
gives
A =
1×3 cell array
{1×3 double} {1×5 double} {1×5 double}
bigcolvec =
1
2
3
10
11
12
13
14
1
2
3
4
5
참고 항목
카테고리
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!