我在python2.7上,我想在将所有坐标初始化为0之后从矩阵中的特定坐标获取对象:
import numpy as np
class test:
"it's a test"
def __init__(self):
self.x=4
self.y=5
mat=np.full(shape=(4,4),fill_value=0)
mat[2,2]=test()
print(mat[2,2].x)
print(mat[2,2].y)
但是我有这个错误:
Traceback (most recent call last):
File "/root/Documents/matrix.py", line 11, in <module>
mat[2,2]=test()
AttributeError: test instance has no attribute '__trunc__'enter code here
如果我将第9行更改为:
`mat=np.zeros(shape=(4,4))
我收到此错误:
Traceback (most recent call last):
File "/root/Documents/matrix.py", line 11, in <module>
mat[2]=test()
AttributeError: test instance has no attribute '__float__'
对于简单列表中的元素而言,它可以正常工作,所以我希望这不是由于我将numpy与Matrix一起使用...
我希望有人能帮助我,谢谢!
答案 0 :(得分:0)
您应该明确说明数据类型是对象
mat=np.full(shape=(4,4),fill_value=0, dtype=object)
答案 1 :(得分:0)
请注意您的语句创建的内容。
In [164]: mat=np.full(shape=(4,4),fill_value=0)
In [165]:
In [165]: mat
Out[165]:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
In [166]: mat.dtype
Out[166]: dtype('int64')
此数组只能容纳整数。该错误意味着它将尝试将__trunc__
方法应用于您的对象。这将适用于像12.23.__trunc__()
这样的数字。但是您尚未定义这种方法。
In [167]: mat=np.zeros(shape=(4,4))
In [168]: mat
Out[168]:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
In [169]: mat.dtype
Out[169]: dtype('float64')
这里dtype是float。同样,您尚未定义__float__
方法。
一个列表包含指向Python对象的指针。
In [171]: class test:
...: "it's a test"
...: def __init__(self):
...: self.x=4
...: self.y=5
...: def __repr__(self):
...: return 'test x={},y={}'.format(self.x, self.y)
...:
In [172]: alist = [test(), test()]
In [173]: alist
Out[173]: [test x=4,y=5, test x=4,y=5]
我们可以创建一个数组来保存您的对象:
In [174]: arr = np.array(alist)
In [175]: arr
Out[175]: array([test x=4,y=5, test x=4,y=5], dtype=object)
In [176]: arr[0].x
Out[176]: 4
但是请注意dtype
。
对象dtype数组类似于列表,具有一些数组属性。可以调整它们的形状,但是大多数操作必须使用某种列表迭代。数学取决于您定义的方法。
除非确实需要,否则不要使用对象dtype数组。列表更易于使用。