How to execute a function for several different range from a same array?

조회 수: 5 (최근 30일)
Yanjika O
Yanjika O 2020년 5월 19일
편집: Sindar 2020년 5월 19일
Hello people,
I have this excel data sheet that I imported to the matlab in an array "s".
S=readtable('safe1.xlsx','Sheet','ezOutput','Range','M1:M23026');
s=table2array(S)';
out=s[1693:2203 4001:4510];
%FIND THE DISTANCE VALUE BELOW 6 USING LOGICAL INDEXING
for j=1:length(out);
idx=s<5;
ii1=strfind([0 idx 0],[0 1]);
ii2=strfind([0 idx 0],[1 0])-1;
end
%the frame rate of the video is 30, thus 30 indicates 1 sec of video
ii=(ii2-ii1+1)>=30; %define the minimum duration which the speed value goes under 10 for 30 frames
out=arrayfun(@(x,y)s(x:y),ii1(ii),ii2(ii),'un',0); %wrap the result of each function call into a cell
n=cellfun(@numel,cell(out));%finding number of element in cells of an array
for n=n(:,:)'
fd=(n/30);%finding time duration of freezing based on the number of elements in array cell
f=sum(fd);
disp(f)
end
col_head={'Conditioning','Freezing,(sec)','Total freezing,(sec)'};
row_head=(1:10)';
xlswrite('safe1.xlsx',col_head,'Sheet2','A1:C1');
xlswrite('safe1.xlsx',row_head,'Sheet2','A2:A11');
I wanted extract or bin my data before but recently I have found out that I could specify the range of my data as follows:
out=s[1693:2203 4001:4510]; however it shows an error that says:
Error: File: Untitled Line: 7 Column: 6. Invalid expression. When calling a function or indexing a variable, use parentheses. Otherwise, check for mismatched delimiters.
Plus I want to repeat the code below determining whether the range of an array elements were under 5 and if so was it under 5 for 30 frames and if so calculating the number of the frames and write it out to different excel sheet.
Please kindly give your suggestions.
Thank you in advance.
  댓글 수: 1
Sindar
Sindar 2020년 5월 19일
편집: Sindar 2020년 5월 19일
To index a variable, you need parenthesis. The brackets allow you to define a set of indices that contains multiple groups.
out=s(1693:2203);
out=s([1693:2203 4001:4510]);
You can probably access the data directly from the table. In the case of tables (and cell arrays), use {} to access data:
out=S{[1693:2203 4001:4510],1};

댓글을 달려면 로그인하십시오.

답변 (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