Я пытался реализовать свой пользовательский тип данных кватернионов, который имеет 4 члена: w, x, y, z. И я нашел официальный пример кода: https://github.com/numpy/numpy-dtypes/tree/master/npytypes/quaternion
Я протестировал эту реализацию следующим образом:
import numpy as np
import npytypes.quaternion
a = np.zeros((2, 2), dtype=np.float).astype(np.quaternion)
print(a)
print(a[0][0].w) # correct, get 0.0
print(a.w) # wrong, AttributeError: 'numpy.ndarray' object has no attribute 'w'
И я получил:
[[quaternion(0, 0, 0, 0) quaternion(0, 0, 0, 0)]
[quaternion(0, 0, 0, 0) quaternion(0, 0, 0, 0)]]
0.0
Traceback (most recent call last):
File "e:/..../test.py", line 7, in <module>
print(a.w)
AttributeError: 'numpy.ndarray' object has no attribute 'w'
То, что я ожидал, было похоже:
>>> a.w
array([[0.0, 0.0], [0.0, 0.0]], dtype=np.float)
И мой вопрос заключается в том, как я могу изменить этот код для достижения этой цели ?
np.complex
сделал это скважина:
>>> import numpy as np
>>> a = np.random.rand(2, 3).astype(np.complex)
>>> a
array([[0.94226049+0.j, 0.71994713+0.j, 0.718848 +0.j],
[0.57285105+0.j, 0.35576711+0.j, 0.51016149+0.j]])
>>> a.real
array([[0.94226049, 0.71994713, 0.718848 ],
[0.57285105, 0.35576711, 0.51016149]])
>>> a.real.dtype
dtype('float64')