Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I'm used to MATLAB so this might be a stupid question but Mathematica is freaking me out.

I have a big matrix with the following format:

M = {{A,B,C},{1,{1,3,6,7},0},{1,{3,7,9},1}}

As you can see, each element in the second column is a separate list again. These separate lists contain integers, so it's no problem to get back to them. For example if I use MemberQ[M[[2,2]],1] it returns True, as it's supposed to do.

What I want to do now: my Matrix is a little longer, contains approx. 5'000 rows. I want to check every seperate list mentioned above for the appearance of a specific integer, as I did above with the MemberQ.

As a result it should give me something like the following (taking M as example): {True,False}.

I thought that's supposed to be easy with a for-loop as it is in MATLAB, but Mathematica always stops when condition is not met...

Looking forward to your answers. Please state if I need to clarify my question!

share|improve this question
    
Please be precise in the problem description. The second row of this matrix is {1,{1,3,6,7},0}. The elements of the second row are not lists, contradicting what you said. memberQ[M[2,2],1] is not correct Mathematica code and won't return True. If you mean MemberQ[M[[2,2]],1], please write it as such. –  Szabolcs Jun 14 at 13:21
    
Sorry for that, recognized it myself, already edited. Meant second column, and memberQ now correct. –  Phily Jun 14 at 13:22
    
So B is a list then? –  Szabolcs Jun 14 at 13:22
    
Not a Mma matrix (see MatrixQ) ... but a tensor. –  wolfies Jun 14 at 13:23
    
Is MemberQ[#[[2]], 1] & /@ M what you are looking for? –  Öskå Jun 14 at 13:24

1 Answer 1

up vote 5 down vote accepted

All you need is to do Map MemberQ over the second column (a.k.a. [[2]]) of each lines:

M = {{A,B,C},{1,{1,3,6,7},0},{1,{3,7,9},1}}
MemberQ[#[[2]], 1] & /@ M

{False, True, False}

An equivalent would be (thanks to Mr.Wizard):

MemberQ[#2, 1] & @@@ M
share|improve this answer
1  
Slightly cleaner and faster: MemberQ[#2, 1] & @@@ M (+1) –  Mr.Wizard Jun 14 at 14:49
    
@Mr.Wizard I'm surprised that it's faster (haven't tried), but it's definitely more appealing to me. –  Szabolcs Jun 14 at 15:31
    
@Szabolcs The statement only holds for unpacked data, but if we're working with packed data numeric methods are likely to be much faster (as I'm sure you know; stating it for others). –  Mr.Wizard Jun 14 at 15:55

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.