Not sure if this is a bug or not.  I am using a fairly recent master branch.<br><br>>>> # Setting up...<br>>>> import numpy as np<br>>>> a = np.zeros((10, 1), dtype=[('foo', 'f4'), ('bar', 'f4'), ('spam', 'f4')])<br>

>>> a['foo'] = np.random.random((10, 1))<br>>>> a['bar'] = np.random.random((10, 1))<br>>>> a['spam'] = np.random.random((10, 1))<br>>>> a<br>array([[(0.8748096823692322, 0.08278043568134308, 0.2463584989309311)],<br>

       [(0.27129432559013367, 0.9645473957061768, 0.41787904500961304)],<br>       [(0.4902191460132599, 0.6772263646125793, 0.07460898905992508)],<br>       [(0.13542482256889343, 0.8646988868713379, 0.98673015832901)],<br>

       [(0.6527929902076721, 0.7392181754112244, 0.5919206738471985)],<br>       [(0.11248272657394409, 0.5818713903427124, 0.9287213087081909)],<br>       [(0.47561103105545044, 0.48848700523376465, 0.7108170390129089)],<br>

       [(0.47087424993515015, 0.6080209016799927, 0.6583810448646545)],<br>       [(0.08447299897670746, 0.39479559659957886, 0.13520188629627228)],<br>       [(0.7074970006942749, 0.8426893353462219, 0.19329732656478882)]], <br>

      dtype=[('foo', '<f4'), ('bar', '<f4'), ('spam', '<f4')])<br>>>> b = (a['bar'] > 0.4)<br>>>> b<br>array([[False],<br>       [ True],<br>

       [ True],<br>       [ True],<br>       [ True],<br>       [ True],<br>       [ True],<br>       [ True],<br>       [False],<br>       [ True]], dtype=bool)<br>>>> # ---- Boolean indexing of structured array with a (10,1) boolean array ----<br>

>>> a[b]['foo']<br>array([ 0.27129433,  0.49021915,  0.13542482,  0.65279299,  0.11248273,<br>        0.47561103,  0.47087425,  0.707497  ], dtype=float32)<br>>>> # ---- Boolean indexing of structured array with a (10,) boolean array ----<br>

>>> a[b[:,0]]['foo']<br>array([[(0.27129432559013367, 0.9645473957061768, 0.41787904500961304)],<br>       [(0.4902191460132599, 0.6772263646125793, 0.07460898905992508)],<br>       [(0.13542482256889343, 0.8646988868713379, 0.98673015832901)],<br>

       [(0.6527929902076721, 0.7392181754112244, 0.5919206738471985)],<br>       [(0.11248272657394409, 0.5818713903427124, 0.9287213087081909)],<br>       [(0.47561103105545044, 0.48848700523376465, 0.7108170390129089)],<br>

       [(0.47087424993515015, 0.6080209016799927, 0.6583810448646545)],<br>       [(0.7074970006942749, 0.8426893353462219, 0.19329732656478882)]], <br>      dtype=[('foo', '<f4'), ('bar', '<f4'), ('spam', '<f4')])<br>

<br><br>So, if I index with a (10, 1) boolean array, I get back a (N,) shape result (regardless of whether I am accessing a field or not). But, if I index with a (10, ) boolean array, I get back a (N, 1) result.  Note that other forms of indexing such as slicing and fancy indexing returns (N, 1) shaped results.  Now, admittedly, this is actually consistent with boolean indexing of regular numpy arrays.  I just wanted to make sure that this is intentional.  This has caused some confusion for me recently when I (perhaps falsely) expected that the result from a boolean index of a structured array would result in a similarly structured array.  The use-case was to modify an existing function by removing the unwanted "rows" with a simply boolean index statement instead of a slice.<br>

<br>Cheers!<br>Ben Root<br><br>