Efficient way of selecting columns of a matrix
2 次查看(过去 30 天)
显示 更早的评论
Hello everybody,
I am quite new to Matlab and came to the following "problem".
During some for-loops I need to repeatingly select various columns of a matrix. For now I am doing it like this:
cy = cyclePosData(:, cyStart : cyEnd);
The matrix 'cyclePosData' usually has two rows and different number of rows depending on the iteration of the for-loops.
Throughout a method cointaining the for-loop there are multiple of these kind of operations. The line above is called approx. 120 000 times and takes 1.508s. Summed up, these lines with the similar operation take 3.883s. This is defenitely too long for my case.
Question: Is there a more efficient way in Matlab to select a part of a matrix (e.g. columns x to y)?
Thanks in advance for your help guys.
The code in some context:
for i = 1 : fcyLen - 1
cyEnd = fcyLen - 1;
cyStart = max(1, fcyLen - deltaLen - i + 1);
cy = cyclePosData(:, cyStart : cyEnd);
end
3 个评论
Bob Thompson
2020-1-9
Can you speak more to what kind of data you're getting (numeric, text, etc) and how you're doing your comparison? It seems like the solution might be in your actual comparison logic, rather than in the loop.
回答(1 个)
Stijn Haenen
2020-1-9
You can get the data from different columns also in two (maybe more?) ways:
a=[1:10;11:20;21:30];
tic
for i=1:10000
a(:,7:10);
end
toc
tic
for i=1:10000
a(20:30);
end
toc
The second way is 2 to 3 times faster but you get the data in a single array. I dont know if this causes problems in your script.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Performance and Memory 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!