Discussion:
[Numpy-discussion] improving structured array assignment
Allan Haldane
2015-08-07 02:59:15 UTC
Permalink
Hello all,

I've written up a tentative PR which tidies up structured array assignment,

https://github.com/numpy/numpy/pull/6053

It has a backward incompatible change which I'd especially like to get
some feedback on: Structure assignment now always works "by field
v1 = np.array([(1,2,3)],
... dtype=[('a', 'i4'), ('b', 'i4'), ('c', 'i4')])
v2 = np.array([(4,5,6)],
... dtype=[('b', 'i4'), ('a', 'i4'), ('c', 'i4')])
v1[:] = v2
Previously, v1 would be set to "(5,4,6)" but with the PR it is set to
"(4,5,6)".

This might seem like negligible improvement, but assignment "by field
name" has lots of inconsistent/broken edge cases which I've listed in
the PR, which disappear with assignment "by field position". The PR
doesn't seem to break much of anything in scipy, pandas, and astropy.

If possible, I'd like to try getting a deprecation warning for this
change into 1.10.

I also changed a few more minor things about structure assignment,
expanded the docs on structured arrays, and made a multi-field index
(arr[['f1', 'f0']]) return a view instead of a copy, which had been
planned for 1.10 but didn't get in because of the strange behavior of
structure assignment.

Allan

Loading...