例如3x^4-17x^2-3x+5。多项式的每个项可以表示为一对整数(系数、指数)。然后,多项式本身是这样的对的列表,如[(3,4),(-17,2),(-3,1),(5,0)]
所示。
零多项式0表示为空列表[]
,因为它没有具有非零系数的项。
我想写两个函数,用元组(系数、指数)的相同表示形式对两个输入多项式进行相加和相乘:
>
addpoly([(4,3),(3,0)],[(-4,3),(2,1)])
应该给出[2,1),(3,0)]
addpoly([(2,1)],[(-2,1)])
应该给出[]
multpoly([(1,1),(-1,0)],[(1,2),(1,1),(1,0)])
应该给出[(1,3),(-1,0)]
这里有一些东西,我开始了,但完全被打动了!
def addpoly(p1, p2):
(coeff1, exp1) = p1
(coeff2, exp2) = p2
if exp1 == exp2:
coeff3 = coeff1 + coeff2
正如评论中所建议的那样,把多项式表示成指数的多组要简单得多。
在Python中,最接近多集的是计数器数据结构。使用将指数映射到系数的计数器
(甚至只是一个普通字典)将自动合并具有相同指数的条目,就像您在编写简化多项式时所期望的那样。
您可以使用计数器
执行操作,然后在使用如下函数完成后转换回对列表表示形式:
def counter_to_poly(c):
p = [(coeff, exp) for exp, coeff in c.items() if coeff != 0]
# sort by exponents in descending order
p.sort(key = lambda pair: pair[1], reverse = True)
return p
def addpoly(p, q):
r = collections.Counter()
for coeff, exp in (p + q):
r[exp] += coeff
return counter_to_poly(r)
def mulpoly(p, q):
r = collections.Counter()
for (c1, e1), (c2, e2) in itertools.product(p, q):
r[e1 + e2] += c1 * c2
return counter_to_poly(r)
问题内容: 说,有两个哈希集,如何计算它们的交集? 问题答案: 使用以下方法: 如果要保留集合,请创建一个新集合以保存交集: 该的的说,这正是你想要的: 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中删除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作将有效地修改此集合,以使其值为两个集合的交集。
我正在开发一个修改过的Mastermind游戏,我需要比较猜测和代码数组,并计算正确位数的数量。 它会一直工作,直到代码数组中有重复的数字。我知道这与第二个for循环和从正确的数字中减去有关。有没有办法只用循环和基本知识来修复它?
本文向大家介绍python不使用for计算两组、多个矩形两两间的iou方式,包括了python不使用for计算两组、多个矩形两两间的iou方式的使用技巧和注意事项,需要的朋友参考一下 解决问题: 不使用for计算两组、多个矩形两两间的iou 使用numpy广播的方法,在python程序中并不建议使用for语句,python中的for语句耗时较多,如果使用numpy广播的思想将会提速不少。 代码:
我正在尝试使用一个函数从pandas数据帧中的多个列计算多个列。该函数接受三个参数-a-、-b-和-c-,并返回三个计算值-sum-、-prod-和-quot-。在我的pandas数据框架中,我有三个列-a-、-b-和-c-我想从中计算列-sum-、-prod-和-quot-。 我所做的映射只有在正好有三行时才起作用。我不知道出了什么问题,尽管我认为这与选择正确的轴有关。有人能解释一下发生了什么,
问题内容: 如何在Java中计算两个角度量度(以度为单位)的差,使结果在[0°,180°]范围内? 例如: 问题答案: /* * Shortest distance (angular) between two angles. * It will be in range [0, 180]. / public static int distance(int alpha, int beta) { int