shifting without for loop
이전 댓글 표시
Hello,
I have two cells each 60x23 and each cell consist of columns with different length.
For each cell, I need
1- Get ten values starting from last values,
2- Apply fitlm function on the obtained values
3- Get the Coefficients {2,1} of the fitlm
4- omit the last value in step1, shift one value and get ten elements. Then repeat steps 2and3. (hopefully without for loops as i found it complicated with cells having variable lengths).
5- Goal: obtain a 60x23 cell where each cell has the Coefficients of linear regression for each ten values.
My attempted solution works till step 3 as shown:
Time2sec = lst2val % 60x23 cell
delta2sec = delta.delta % 60x23 cell
len0 = cellfun(@length, Time2sec, 'uni',0)
len1 = cellfun (@(x) x-9, len0, 'uni',0)
%len1 = cellfun (@(x) x-10, len0,'uni',0)
len2 = cellfun (@(x) x+9, len1, 'uni',0)
last10frames = cellfun (@(x,y1, y2) x( y1:y2 ), Time2sec, len1, len2 , 'Uni',0)
len00 = cellfun(@length, delta2sec, 'uni',0)
len11 = cellfun (@(x) x-9, len00,'uni',0)
len22 = cellfun (@(x) x+9, len11, 'uni',0)
last10frames_2 = cellfun (@(x,y1, y2) x( y1:y2 ), delta2sec, len11, len22 , 'Uni',0)
reg0 = cellfun (@fitlm, last10frames, last10frames2, 'uni',0)
M_value = cellfun (@(x) x.Coefficients{2,1}, reg0 , 'uni', 0)
% omit value, shift with step -1 till first element in each cell and apply linear regression.
I really appreciat the help.
댓글 수: 5
dpb
2019년 7월 22일
"- omit the last value in step1, shift one value and get ten elements. Then repeat steps 2and3. (hopefully without for loops)."
Even if you write cellfun or arrayfun, ML builds a loop internally; just that you don't see it.
Sometimes, it's just the far simpler way and, owing to the complexity of how to vectorize such expressions and the overhead in the functions themselves, a for loop may actually be faster besides.
the cyclist
2019년 7월 22일
Suppose that the Time2sec{1,1} is a vector with 12 values.
What specifically should the output M_value{1,1} be?
I'm guessing a 3x1 vector -- the coefficient for each of three possible regressions on 10 consecutive values:
- Time2sec{1,1}(1:10)
- Time2sec{1,1}(2:11)
- Time2sec{1,1}{3:12)
Is that right?
I agree with @dpb that avoiding the for loop here is probably unnecessary.
the cyclist
2019년 7월 22일
For a given cell location (e.g. i=9, j=13), do Time2sec and delta2sec always have the same length?
Housam
2019년 7월 22일
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 String Parsing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!