python中多项式的唯一元素

时间:2015-08-03 18:06:50

标签: python numpy

当你在python中扩展sums的乘积时,我需要得到成对的术语。

e.g。扩展(a1+a2+a3)(b1+b2+b3)(c1+c2+c3)给出:

a1b1c1 + a1b1c2 + a1b1c3+ a1b2c1 + ... + a3b3c3

22或额外条款。

我需要找到一种方法来删除索引匹配的此扩展的任何元素(例如,具有a1和b1,或b2和c2的任何元素)。

或代码:

import numpy as np
a = np.array([0,1,2])
b = np.array([3,4,5])
c = np.array([6,7,8])

output = a.sum() * b.sum() * c.sum()

我需要删除条件a[i]*b[j]*c[k],其中i == j,i == k或j == k。

对于小向量,它很简单,但随着这些向量变长,并且有更多这些向量可以尝试更多可能的组合(我的向量是〜200个元素)。

我的老板有一个在Mathematica中执行此操作的方案,该方案明确地进行代数扩展,并且使用匹配的指数拉出术语,但这非常依赖于Mathematica的符号代数设置,所以我不能看看如何在Python中实现它。

itertools.combinations为您提供所有此类组合的列表,但对于较长的向量,这实际上很慢。我也看过使用sympy,但这似乎也不适合很长的载体。

有人可以推荐在Python中更好的方法吗?

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?这会加快你的计算速度吗?

PHP_ARG_ENABLE(vehicles,
    [Whether to enable the "vehicles" extension],
    [  --enable-vehicles      Enable "vehicles" extension support])

if test $PHP_VEHICLES != "no"; then
    EXTRA_FLAGS="-std=c++11"
    PHP_REQUIRE_CXX()
    PHP_SUBST(VEHICLES_SHARED_LIBADD)
    PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
    PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi

答案 1 :(得分:0)

我不知道它是否比您当前的实现更快,但是通过滚动NumPy数组(下面为 VisibleRegion vr = map.getProjection().getVisibleRegion(); double bottom = vr.latLngBounds.southwest.latitude; Location center = new Location("center"); center.setLatitude(vr.latLngBounds.getCenter().latitude); center.setLongitude(vr.latLngBounds.getCenter().longitude); Location middleLeftCornerLocation = new Location("center"); middleLeftCornerLocation.setLatitude(center.getLatitude()); middleLeftCornerLocation.setLongitude(left); float dis = center.distanceTo(middleLeftCornerLocation); ),您可以避免重复索引的术语比“明显”实现更快({{1 }}):

special_sum

我明白了:

regular_sum