这个问题有不同的方面,我可以给你一些提示,告诉你如何解决这些问题。请注意,这些都是建议,你肯定需要看看你最喜欢哪一个。
支持线性代数
您提到要支持线性代数,例如向量加法(元素加法)、叉积和内积。这些可用于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=dtype)
else:
return np.array([self.x, self.y, self.z])
vector1, vector2 = VectorArrayInterface(1, 2, 3), VectorArrayInterface(3

本文探讨了在Python中处理3D向量的不同方法,包括使用numpy数组直接进行线性代数运算,以及创建自定义类以实现向量加法、叉积和内积。通过比较numpy的便捷性和自定义类的灵活性,文章提供了实现3D向量操作的多种途径,并讨论了性能和适用场景。
最低0.47元/天 解锁文章
1126

被折叠的 条评论
为什么被折叠?



