Tim Kunisky
Tim Kunisky

Reputation: 63

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?

Upvotes: 6

Views: 610

Answers (2)

HYRY
HYRY

Reputation: 97261

There are many method to assign points, if you want your method works:

points[0][0]['a'][:] = np.array([1, 1, 1])

or:

points[0,0]['a'][:] = np.array([1, 1, 1])

because points[0,0]['a'] is an array, if you want to change the content of the array, you shoud use index.

Upvotes: 2

ev-br
ev-br

Reputation: 26030

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.

Upvotes: 3

Related Questions