gpt4 book ai didi

python - 是否可以用 i,j,k 格式编写 vector ?

转载 作者:太空狗 更新时间:2023-10-30 01:33:56 25 4
gpt4 key购买 nike

我知道可以做类似的事情

i = numpy.array([1,0,0])
j = numpy.array([0,1,0])
k = numpy.array([0,0,1])

a = 2*i + 5*j + 9*k

但是否可以利用与复数处理方式类似的语法,并创建一个可以确定 2i + 5j + 9k 是我的类的成员的类,并自动创建它?

或者它是否需要通过改变它解析文件的方式来改变 python 解释器?我已经查看了语法文件,但我只能看到它暗示的是 NUMBER,并且一次也没有提到 j

我还查看了 parsermodule.c , 但无法轻易发现其中的任何内容,使它的实现方式变得显而易见。

有人知道这怎么可能吗?

我可能应该补充一点,我实际上并不打算这样做(除非奇迹般地证明它不需要重新编译我自己的 python 版本,除了学术之旅之外,这样做是疯狂的),但只是出于对语言如何工作的好奇。

最佳答案

您可以编写一个继承自 numpy.ndarray 的类(即子类)来覆盖 repr 方法(负责控制对象如何打印到控制台),如下所示:

import numpy

class Vector3DDisplay(numpy.ndarray):

def __init__(self, vector):
if len(vector) == 3:
self.vec = numpy.array(vector)
else:
raise TypeError('Vector must be of length 3.')

def __repr__(self):
return str(self.vec[0])+'*i + '+str(self.vec[1])+'*j + '+str(self.vec[2])+'*k '

你可能在这里注意到一个明显的问题:实际 vector 是 self.vec,而不是对象本身,所以你所有的 numpy 操作都必须在属性 self.vec 上完成。这样做的原因是 numpy 数组的编写方式很难对其进行子类化(c.f. this question about subclassing C exentsions)。通常,您使用以下方法初始化数组:

>>>> import numpy
>>>> numpy.ndarray(vector)

问题是 np.array 实际上不是一个类,而是 numpy.ndarray 类的工厂函数,它的初始化方式不同,很少使用。您不能让对象从函数继承方法,因此继承并不简单。

关于python - 是否可以用 i,j,k 格式编写 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com