Обратите внимание на то, что создают ваши операторы.
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, если они вам действительно не нужны.Списки проще в использовании.