我对numpy的数组构造函数有疑问。我想用元组初始化一个二维数组,但它不像整数一样工作:
>>> A = array([[0, 0], [3, 5]])
>>> print(A)
[[0 0]
[3 5]]
>>> A[1, 1] = 7
>>> print(A)
[[0 0]
[3 7]]
>>> A = array([[(0, 0), (0, 1)], [(1, 0), None]], dtype=object)
>>> A[1, 1] = (2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> A.shape
(2,)
我真的需要“手工填写”这些矩阵。有什么想法吗?
答案 0 :(得分:3)
您的代码似乎对我有用(使用显式的numpy命名空间)。我正在使用numpy v1.6.1:
In [8]: import numpy as np
In [9]: A = np.array([[(0, 0), (0, 1)], [(1, 0), None]], dtype=object)
In [10]: A[1, 1] = (2, 3)
In [11]: A.shape
Out[11]: (2, 2)
In [12]: A
Out[12]:
array([[(0, 0), (0, 1)],
[(1, 0), (2, 3)]], dtype=object)
你使用的是什么版本的numpy?
更新这似乎是与numpy版本相关的问题,因为我可以使用numpy v1.5.1(OSX Lion中基本python安装附带的版本)重现OP的错误。我不确定这是否是修复的numpy中的错误或实现中的更改。我会更新到更新版本的numpy或使用这个简单的解决方法:
>>> A = np.array([[(0, 0), (0, 1)], [(1, 0), None]], dtype=object)
>>> A[1][1] = (2,3)
>>> A
array([[(0, 0), (0, 1)], [(1, 0), (2, 3)]], dtype=object)
更新#2 以下是希望您可以适应的一般修复:
>>> C = np.empty((2,2),object)
>>> B = [[(0, 0), (0, 1)], [(1, 0), None]]
>>> C[:] = B
>>> C
array([[(0, 0), (0, 1)],
[(1, 0), None]], dtype=object)
>>> C.shape
(2, 2)
>>> C[1,1] = (2,3)
>>> C
array([[(0, 0), (0, 1)],
[(1, 0), (2, 3)]], dtype=object)