Effacer les filtres
Effacer les filtres

matrix logical indexing

3 vues (au cours des 30 derniers jours)
HRmatlab
HRmatlab le 13 Sep 2011
I have a matrix A with dimensions nxm. I want to extract all values x that are between two values a and b, that is: (a<x<b). How can I do it in one step?
I know i can do it in two steps: A1 = A(A>a); A2 = A1(A1<b);
how do I combine the two logical statements?

Réponse acceptée

Fangjun Jiang
Fangjun Jiang le 13 Sep 2011
A1=A(A>a & A<b)
  1 commentaire
HRmatlab
HRmatlab le 13 Sep 2011
thank you!

Connectez-vous pour commenter.

Plus de réponses (1)

Teja Muppirala
Teja Muppirala le 13 Sep 2011
In the case of checking bounds by combining two logical statements, I think the following expression will generally be significantly faster:
B = A(abs(A-(a+b)/2) < (b-a)/2);
The only thing is, you need to make sure that the datatypes and magnitudes of numbers you are working with can be used in this expression. For example, if you are working with integers, you might get overflow/underflow in some situations, etc. For regular double precision numbers you should probably be ok.
  5 commentaires
Teja Muppirala
Teja Muppirala le 13 Sep 2011
It is probably version dependent. I use R2011b and I find that if I run your code for A = rand(1000), I get:
t1=3.190328
t2=2.453046
For A = rand(100), I get:
t1=0.040473
t2=0.030582
I couldn't tell you the reason why, but I do know that a lot of the elementary math functions have been getting much faster lately.
Jan
Jan le 13 Sep 2011
@Teja: The math functions are limited by the processor speed, if the data match into the processor cache. For large data the memory access should be the limiting factor. Therefore I'd expect your function to be much slower for RAND(1000).
@Fangjun: I get these timings on 2009a running in a single core environment: t1=6.282469, t2=5.247344.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by