So, for Markov chains, I assume that you are only interested in state transitions. You can group all state transitions into a single Nx2 matrix and then count the number of times a row appears.
In this example, I use three observations of length 4, 3, and 3. I can use cellfun to group all state transitions in one matrix as follows:
obs = cell(1, 3); obs(1) = {[1 2 3 4]}; obs(2) = {[4 5 6]}; obs(3) = {[3 4 5]}; transitions = cellfun(@(x)([x(1:length(x)-1); x(2:length(x))]), obs, 'UniformOutput', false); alltransitions = cell2mat(transitions)';
Which gives me my observed transitions (1->2, 2->3, 3->4 ...) :
alltransitions = 1 2 2 3 3 4 4 5 5 6 3 4 4 5
To set up the transition matrix, you can use the advice given here and calculate the rows of all your transitions:
http://www.mathworks.it/matlabcentral/answers/75009-i-ve-a-matrix-of-6x4-and-i-want-to-count-the-rows-how-many-times-it- occur-in-a-matrix
[uniqueTransitions, ~, i]=unique(alltransitions,'rows','stable'); v=arrayfun(@(x) sum(i==x),1:size(uniqueTransitions,1))'; p = v/sum(v);
My vector p contains my transition probability, so I can continue and build a sparse matrix
transitionMatrix = sparse(uniqueTransitions(:,1), uniqueTransitions(:,2), p, 6,6)
that leads to:
transitionMatrix = (1,2) 0.1429 (2,3) 0.1429 (3,4) 0.2857 (4,5) 0.2857 (5,6) 0.1429