one matrix that is made from multiple vectors of different lengths that don't start at the same point

조회 수: 1 (최근 30일)
Hi Everyone,
I am using tracking software to extract behavioral features from mulitple individuals in a video and I am running into problems generating a matrix of all of the individual data from the resulting .mat file. The problem is that because of tracking issues each vector (data for each individual) is not necessarily the same size and doesn't neccessarily start at the same time. To solve this I have created a padded array:
M=zeros (15, 35,000);
M(1,1:length(data{1,1}))=data{1,1};
M(2,1:length(data{1,2}))=data{1,2};
M(3,1:length(data{1,3}))=data{1,3};
M(4,1:length(data{1,4}))=data{1,4};
M(5,1:length(data{1,5}))=data{1,5};
M(6,1:length(data{1,6}))=data{1,6};
M(7,1:length(data{1,7}))=data{1,7};
M(8,1:length(data{1,8}))=data{1,8};
M(9,1:length(data{1,9}))=data{1,9};
M(10,1:length(data{1,10}))=data{1,10};
M(11,1:length(data{1,11}))=data{1,11};
M(12,1:length(data{1,12}))=data{1,12};
M(13,1:length(data{1,13}))=data{1,13};
M(14,1:length(data{1,14}))=data{1,14};
M(15,1:length(data{1,15}))=data{1,15};
But instead of starting at cell 1 for each row, I would like to start pasting the data at the cell when the tracking started for that individual. Tracking of some individuals are not picked up until 5570 so instead of starting at 1, I'd like to start at 5570.
I tried M(10,5570:length(data{1,10}))=data{1,10};
But I get an error saying "Subscripted assignment dimension mismatch". I get the same error if I try:
I tried M(10,5570:end)=data{1,10};
Any ideas as to how to paste vectors into a matrix that start at a specific point and continue from there to the end?
Thanks!!

채택된 답변

Voss
Voss 2023년 1월 31일
Assuming data{1,10} is a row vector (i.e., the cell data(1,10) contains a row vector), then the following would work:
M(10,5570:5570+length(data{1,10})-1) = data{1,10};
So you can set up your starting indices for each row, and then proceed in a loop:
M = zeros(15, 35000); % Note that zeros(15, 35,000) is an empty 3D array (of size 15-by-35-by-0)
start_idx = [1 5570 1 5570 5570 11140 1 1 5570 5570 1 1 1 5570 5570]; % start index for each row of M
for ii = 1:size(M,1)
M(ii,start_idx(ii):start_idx(ii)+length(data{1,ii})-1) = data{1,ii};
end

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by