# Efficient way/best practice to slice array under a logical condition as well as other conditions

20 views (last 30 days)
Mitsu on 4 Oct 2020
I did not know how to properly title this question, so please bear with me.
Simply put, with the following two arrays:
A = [0 1 0 1 0 0 0 1]'
B = [800 1 1 60;
900 3 0 30;
900 4 0 30;
900 6 0 30;
900 7 0 30;
900 11 0 30;
900 1 2 60;
1000 1 2 60;
]
Note that A and B have the same number of columns.
I would like, for example, to slice B under the following constraints:
• A == 1
• B(:,3) ~= 0
• Keep only columns [2 3 4] of B
This is the way I am doing it at the moment:
B_sliced = B(A==1 & B(:,3)~=0,[2 3 4]);
Alternatively, one could do:
B_sliced = B(logical(A) & B(:,3)~=0,[2 3 4]);
With tic toc and large matrices, I am not noticing much of a difference in performance.
Is there a best practice regarding combining logical with non-logical conditions? Should I keep something in mind, or it doesn't really matter which way I go? Is there a way to make any of these more efficient by using "find"?
I hope you can enlighten me a bit! Thanks.
Bruno Luong on 4 Oct 2020
Edited: Bruno Luong on 4 Oct 2020
Don't split the hair, it doesn't really matter.
Just do the way te code looks most readable to you.

madhan ravi on 4 Oct 2020
What you have is more efficient.

### Categories

Find more on Environment and Settings in Help Center and File Exchange

R2018b

### Community Treasure Hunt

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

Start Hunting!