这个问题有不同的方面,我可以给你一些提示,告诉你如何解决这些问题。请注意,这些都是建议,你肯定需要看看你最喜欢哪一个。
支持线性代数
您提到要支持线性代数,例如向量加法(元素加法)、叉积和内积。这些可用于numpy.ndarray,因此您可以选择不同的方法来支持它们:只需使用一个numpy.ndarray,而不必为自己的类操心:import numpy as np
vector1, vector2 = np.array([1, 2, 3]), np.array([3, 2, 1])
np.add(vector1, vector2) # vector addition
np.cross(vector1, vector2) # cross product
np.inner(vector1, vector2) # inner product
在numpy中没有定义内建向量旋转,但是有几个可用的源,例如"Rotation of 3D vector"。所以你需要自己实现它。
您可以创建一个类,独立于存储属性的方式,并提供一个__array__方法。这样,您就可以支持(所有)numpy函数,就像您的实例本身是numpy.ndarray一样:class VectorArrayInterface(object):
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
def __array__(self, dtype=None):
if dtype:
return np.array([self.x, self.y, self.z], dtype=d