I'm actively looking at this issue since it was my pull request that broke this (https://github.com/numpy/numpy/pull/350). We definitely don't want to break this functionality for 1.7. The problem is that even though indexing with a subset of fields still returns a copy (for now), it now returns a copy of a view of the original array. When you call copy() on a view, it copies the entire original structured array with the view dtype. A short term fix would be to "manually" create a proper copy to return similar to what _index_fields() did before my change, but since the idea is to eventually return the view instead of a copy, long term we need a way to do a proper copy of a structured array view that doesn't copy the unwanted fields.

-Jay

On Wed, Jul 25, 2012 at 10:15 AM, Skipper Seabold <jsseabold@gmail.com> wrote:
On Sun, Jul 22, 2012 at 2:15 PM, Ralf Gommers
<ralf.gommers@googlemail.com> wrote:
> Hi,
>
> Just a heads up that right now views of recarrays seem to be problematic,
> this doesn't work anymore:
>
>>>> import statsmodels.api as sm
>>>> dta = sm.datasets.macrodata.load()  # returns a record array with 14
>>>> fields
>>>> dta.data[['infl', 'realgdp']].view((float,2))
>
> I opened http://projects.scipy.org/numpy/ticket/2187 for this. Probably a
> blocker for 1.7.0.
>
> Question: is that really the recommended way to get an (N, 2) size float
> array from two columns of a larger record array? If so, why isn't there a
> better way? If you'd want to write to that (N, 2) array you have to append a
> copy, making it even uglier. Also, then there really should be tests for
> views in test_records.py.
>

Any comments on this? I have a lot of broken code to deal with if
((float, shape[1])) is no longer allowed on structured and rec arrays.

Skipper
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion