Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NumPy: array assignment issue when using custom dtype

I've found the following puzzling behavior with NumPy and a custom dtype for an ndarray:

import numpy as np

# Make a custom dtype with a single triplet of floats (my actual dtype has other
# components, but this suffices to demonstrate the problem.
dt = np.dtype([('a', np.float64, 3)])

# Make a zero array with this dtype:
points = np.zeros((4, 4), dtype=dt)

# Try to edit an entry:
points[0][0]['a'] = np.array([1, 1, 1])

print points[0][0]['a']

Now, this comes back as containing not [1. 1. 1.] as I would expect, but instead [1. 0. 0.], only performing the assignment on the first coordinate. I can get around this by performing the assignment coordinate-wise, but that seems unnecessary given that the full assignment should certainly be the default behavior in this case.

Any thoughts on what's going on here?

like image 224
Tim Kunisky Avatar asked Aug 28 '11 05:08

Tim Kunisky


1 Answers

If you change the ordering of the indices, like this: points['a'][0][0] = np.array([1, 1, 1]), it works ok for me (python 2.6.5, numpy 1.3.0 on Ubuntu 10.04). I wish I knew why.

like image 58
ev-br Avatar answered Oct 06 '22 01:10

ev-br