count the number of transitions from 0 to 3 in cells in cell array

2 次查看(过去 30 天)
Hi.
I have a cell array containing 1000 cells. in each cell there is a matrix with different number of rows but with 50 columns.
the rows contains number from 0-3. I want to count how many times a 0 is followed by a 3 in each column.
Below you can see the code that I used to count the total number of transitions, from any number to another. Is there an easy way to change this code so that it counts the number of transitions from a certain number to another?
x=numel(CA)
newCA=cell(x,1);
for i=1:x
newCA{i}=sum(diff(CA{i})~=0);
end

采纳的回答

Stephen23
Stephen23 2018-11-13
编辑:Stephen23 2018-11-13
Here is a simple method based on logcal arrays, demonstrated on two Nx4 matrices in a cell array. The first matrix has two 0,3 transitions, the second matrix has three.
>> C = {[0,1,2,3;0,3,0,3;0,2,0,1],[0,3,1,2;3,2,1,0;3,0,3,0;3,0,3,3]};
>> C{:}
ans =
0 1 2 3
0 3 0 3
0 2 0 1
ans =
0 3 1 2
3 2 1 0
3 0 3 0
3 0 3 3
>> F = @(m) nnz(m(:,1:end-1)==0 & m(:,2:end)==3);
>> V = cellfun(F,C)
V =
2 3
>> N = sum(V)
N = 5
  3 个评论
Stephen23
Stephen23 2018-11-13
>> C = {[0,0,0,0;3,1,2,0;0,0,3,1;3,3,0,1],[1,1,0,3;0,3,3,3;3,3,3,0]};
>> C{:}
ans =
0 0 0 0
3 1 2 0
0 0 3 1
3 3 0 1
ans =
1 1 0 3
0 3 3 3
3 3 3 0
>> F = @(m) sum(m(1:end-1,:)==0 & m(2:end,:)==3, 1);
>> D = cellfun(F,C,'uni',0);
>> M = vertcat(D{:}) % for each matrix
M =
2 1 0 0
1 0 1 0
>> sum(M,1) % for all matrices
ans =
3 1 1 0

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by