Optimizing for loops by searching some data in cell arrays
1 ビュー (過去 30 日間)
表示 古いコメント
Hello,
I'm searching in multiple cell-array for some data:
for traj_cnt = 1:size(Traj_interpl,2) %for every Traj-Cell
for t_row_cnt = 1:size(Traj_interpl{traj_cnt},1) %for any row of Traj
if t_interpl(t_ref_cnt) == Traj_interpl{traj_cnt}(t_row_cnt,1) %if right row of Traj is choosen
motorspeed_detected(traj_cnt) = Traj_interpl{traj_cnt}(t_row_cnt,2); %write detected value to motorspeed_detected array
break; %just one success possible
else
motorspeed_detected(traj_cnt) = 0; % write 0 to motorspeed_detected array
end
end
end
Sometimes there are too much cells and rows, so is takes long long time and matlab in else state. What can I do to optimize a code?
traj_cnt is a variable of number of cells
Traj_interpl is a big cell array
t_row_cnt is a variable rows in one cell
t_interpl(t_ref_cnt) is a counting time variable (+10 ms) (initialisation outside)
Traj_interpl{traj_cnt}(t_row_cnt,1) is a saved time in cell arrays that I'm looking vor
Traj_interpl{traj_cnt}(t_row_cnt,2) is a saved motor value in cell array tham I try to save
motorspeed_detected array with detected values
So, I'm looking for special time in first column of cell arrays and if I find this, I take a value from second coloumn and save it to motorspeed_detected array.
How can I save resources? Thank you!
回答 (1 件)
Shubham Gupta
2020 年 12 月 3 日
I tried cellfun() to get the desired output without using for loops:
x = cellfun(@(c)c(find(c==t_interpl(t_ref_cnt))+size(c,1)),Traj_interpl,'UniformOutput',false);
y = cellfun(@(c)~isempty(c),x);
motorspeed_detected = zeros(size(Traj));
motorspeed_detected(y)=x{y};
It might not be the most efficient way to do this but it definitely improves efficiency of the code by removing for loops.
2 件のコメント
Shubham Gupta
2020 年 12 月 7 日
Sorry for being late to comment, I believe that sometimes "y" is a vector with logical zeros only. That means, you can't always find "t_interpl" inside "Traj_interpl", so you such have to detect such cases and using if....else condition execute last line only when there is at least one non-zero element. I hope it helps!
参考
カテゴリ
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!