NumPy:使用自定义dtype时的数组赋值问题

时间:2011-08-28 05:53:44

标签: python arrays multidimensional-array numpy

我发现了NumPy的以下令人费解的行为以及ndarray的自定义dtype:

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']

现在,这回来时不包含[1。 1. 1.]正如我所料,但相反[1。 0. 0.],仅在第一个坐标上执行赋值。我可以通过协调地执行赋值来解决这个问题,但这似乎是不必要的,因为在这种情况下完全赋值肯定应该是默认行为。

对这里发生了什么有任何想法?

2 个答案:

答案 0 :(得分:3)

如果更改索引的顺序,如下所示:points['a'][0][0] = np.array([1, 1, 1]),它对我来说没问题(python 2.6.5,在Ubuntu 10.04上为numpy 1.3.0)。我希望我知道为什么。

答案 1 :(得分:2)

如果您希望方法有效,有很多方法可以分配点数:

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

或:

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

因为点[0,0] ['a']是一个数组,如果你想改变数组的内容,你应该使用索引。