我发现了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.],仅在第一个坐标上执行赋值。我可以通过协调地执行赋值来解决这个问题,但这似乎是不必要的,因为在这种情况下完全赋值肯定应该是默认行为。
对这里发生了什么有任何想法?
答案 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']是一个数组,如果你想改变数组的内容,你应该使用索引。