当你在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中更好的方法吗?
答案 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