Skip to content

Assiging to structured array rows with list/array fails (Trac #1758) #2353

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
numpy-gitbot opened this issue Oct 19, 2012 · 2 comments · Fixed by #6053
Closed

Assiging to structured array rows with list/array fails (Trac #1758) #2353

numpy-gitbot opened this issue Oct 19, 2012 · 2 comments · Fixed by #6053

Comments

@numpy-gitbot
Copy link

Original ticket http://projects.scipy.org/numpy/ticket/1758 on 2011-03-07 by @rgommers, assigned to unknown.

Assigning to a structured array with a tuple works, with a list results in an error. Would be good if this could be made to work (this is an enhancement request). With an array gives no warning or exception, but results in garbage. This is a bug.

See also http://thread.gmane.org/gmane.comp.python.numeric.general/30793/focus=30793

>>> arr = np.zeros((5,), dtype=[('var1','f8'),('var2','f8')])
>>> arr['var1'] = np.arange(5)
>>> arr
array([(0.0, 0.0), (1.0, 0.0), (2.0, 0.0), (3.0, 0.0), (4.0, 0.0)], 
      dtype=[('var1', '<f8'), ('var2', '<f8')])
>>> arr[0] = (10,20)
>>> arr
array([(10.0, 20.0), (1.0, 0.0), (2.0, 0.0), (3.0, 0.0), (4.0, 0.0)], 
      dtype=[('var1', '<f8'), ('var2', '<f8')])
>>> arr[0] = np.array([10,20])
>>> arr
array([(4.2439915824246103e-313, 0.0), (1.0, 0.0), (2.0, 0.0), (3.0, 0.0),
       (4.0, 0.0)], 
      dtype=[('var1', '<f8'), ('var2', '<f8')])

If this is fixed, please update doc/structured_arrays.py (section "Filling structured arrays").

@numpy-gitbot
Copy link
Author

@rgommers wrote on 2011-03-09

For the array assignment part, it does work when no casting has to be done. From Skipper on-list:

This is a casting issue. Your array is an integer array. You can
assign with an array.

arr = np.zeros((5,), dtype=[('var1','f8'),('var2','f8')])
arr[0] = np.array([10.0,20])
arr[0]
(10.0, 20.0)

Still a bug, since casting elements of a tuple works fine.

@charris
Copy link
Member

charris commented Feb 20, 2014

Still fails 1.9-devel.

ahaldane added a commit to ahaldane/numpy that referenced this issue Jun 17, 2016
This commit attempts to make structure assignment more consistent, and
then changes multi-field indices to return a view instead of a copy.

Assignment between structures now works "by field position" rather than
"by field name".

Fixes numpy#2353, fixes numpy#6085, fixes numpy#3351, fixes numpy#6085, fixes numpy#6314,
fixes numpy#2346, fixes numpy#7058, fixes numpy#3641, fixes numpy#5994, fixes numpy#7262,
fixes numpy#7493
ahaldane added a commit to ahaldane/numpy that referenced this issue Sep 7, 2017
This commit attempts to make structure assignment more consistent, and
then changes multi-field indices to return a view instead of a copy.

Assignment between structures now works "by field position" rather than
"by field name".

Fixes numpy#2353, fixes numpy#6085, fixes numpy#3351, fixes numpy#6085, fixes numpy#6314,
fixes numpy#2346, fixes numpy#7058, fixes numpy#3641, fixes numpy#5994, fixes numpy#7262,
fixes numpy#7493
theodoregoetz pushed a commit to theodoregoetz/numpy that referenced this issue Oct 23, 2017
This commit attempts to make structure assignment more consistent, and
then changes multi-field indices to return a view instead of a copy.

Assignment between structures now works "by field position" rather than
"by field name".

Fixes numpy#2353, fixes numpy#6085, fixes numpy#3351, fixes numpy#6085, fixes numpy#6314,
fixes numpy#2346, fixes numpy#7058, fixes numpy#3641, fixes numpy#5994, fixes numpy#7262,
fixes numpy#7493
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants