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 have a large list of lists with the dimensions {441,21,21,3} of which I need to print the x,y,z data from every 21st part up to 441. How can I print the 21x21x3 piece of every 21st part of this list? Here's what I've tried below that did not do the job. Also is there an more memory efficient way to perform this task?:

Table[Print["mylist parts", mylist[[i++21]]], {i, 1, 441}];
share|improve this question
1  
Are you sure i++21 is what you meant to write? –  Szabolcs May 5 '12 at 12:10
add comment

3 Answers 3

up vote 2 down vote accepted

You can select every 21st element using

mylist[[21;; ;; 21]]

You can print them using

Do[Print[mylist[[i]]], {i, 21, 441, 21}]

Regarding memory, having these displayed in the Front End will take more memory than just having the data in kernel memory, so Print /@ mylist[[21;; ;; 21]] may be better. Why do you want to print them? If you're aim is to write to a file, there are other ways.

EDIT

To number the parts, you can use Do[Print[Style[i/21, Large]; Print[mylist[[i]]], {i, 21, 441, 21}]

share|improve this answer
    
Just for a check at present to make sure I'm getting all the right pieces. I agree this is a memory strain and may not be possible all at one time. Thanks for your help! –  R Hall May 5 '12 at 12:16
    
This works very well! Is there a way to number the parts as their printed? Thanks so much! –  R Hall May 5 '12 at 12:21
    
@RHall Does my edit to the answer help? –  Szabolcs May 5 '12 at 12:43
    
Perfect! Thanks! –  R Hall May 5 '12 at 13:30
add comment

An alternative is Take

For example:

mat = Array[Subscript[a, ##] &, {50, 3}];

Take[mat, {1, -1, 5}]
share|improve this answer
add comment

Here is another way you can select every 21st element of your list.

sel= Table[mylist[[i]],{i,1,Length@mylist,21}];

Because Mathmatica is interactive, you can then examine one, many or all the selected elements that are held in sel by using expressions like:

sel[[1]]        (* first element *)

sel[[7;;11]]    (* elements 7 through 11 *)

sel[[{2,6,14}]] (* elements 2,6,14 *)

sel[[10;;-2]]   (* every element from 10 until the second last element *)

This should let you examine what you have selected whenever you wish without having to use Print;

share|improve this answer
    
Fantastic! Thanks very much! –  R Hall May 5 '12 at 13:31
add comment

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.