pythonic array subsetting

Nick Matzke matzke at
Tue Feb 17 15:36:07 EST 2009

Looks like "compress" is the right numpy function, but it took forever 
for me to find it...

x = array([[1,2,3], [4,5,6], [7,8,9]], dtype=float)
compress([1,2], x, axis=1)

array([[ 1.,  2.],
        [ 4.,  5.],
        [ 7.,  8.]])

Gary Herron wrote:
> Nick Matzke wrote:
>> Hi,
>> So I've got a square floating point array that is about 1000 x 1000.  
>> I need to  subset this array as efficiently as possible based on an 
>> ordered sublist of the list of rownames/colnames (they are the same, 
>> this is a symmetric array).
>> e.g., if sublist is of length 500, and matches the rownames list at 
>> every other entry, I need to pull out a 500x500 array holding every 
>> other row & column in the parent array.
>> I have to do this hundreds of times, so speed would be useful.
>> Cheers!
>> Nick
> Check out numpy at
> It can do what you want very efficiently.
> Gary Herron

Nicholas J. Matzke
Ph.D. student, Graduate Student Researcher
Huelsenbeck Lab
Center for Theoretical Evolutionary Genomics
4151 VLSB (Valley Life Sciences Building)
Department of Integrative Biology
University of California, Berkeley

Lab websites:
Dept. personal page:
Lab personal page:
Lab phone: 510-643-6299
Dept. fax: 510-643-6264
Cell phone: 510-301-0179
Email: matzke at

Mailing address:
Department of Integrative Biology
3060 VLSB #3140
Berkeley, CA 94720-3140

"[W]hen people thought the earth was flat, they were wrong. When people 
thought the earth was spherical, they were wrong. But if you think that 
thinking the earth is spherical is just as wrong as thinking the earth 
is flat, then your view is wronger than both of them put together."

Isaac Asimov (1989). "The Relativity of Wrong." The Skeptical Inquirer, 
14(1), 35-44. Fall 1989.

More information about the Python-list mailing list