是否有一个可靠且记录良好的Python库,可快速实现一种算法,可以在有向图中找到最大流量和最小切割量?
来自python-graph的pygraph.algorithms.minmax.maximum_flow解决了这个问题,但速度很慢:在一个有4000个节点和11000个边缘的有向图中查找最大流量和最小切割需要> 1分钟.我正在寻找至少快一个数量级的东西.
赏金:我在这个问题上提供了一笔赏金,看看自从提出这个问题以来情况是否发生了变化.如果您对自己推荐的图书馆有个人经验,可以获得奖励积分!
python graph-theory graph mathematical-optimization max-flow
有三个整数x,y并且z(每个> = 1)和给定的上限整数n<10 ^ 6.还有,n = x + y + z和output = cos(x) + cos(y) + cos(z).
练习是最大化output.
我为此编写了一个简单的脚本,但时间复杂度为O(n ^ 3).有什么方法可以简化这个吗?
from math import cos
n = 50
x = 1
y = 1
z = 1
total = cos(x) + cos(y) + cos(z)
for x in xrange(n):
for y in xrange(n):
for z in xrange(n):
if x + y + z == n:
temp = …Run Code Online (Sandbox Code Playgroud) python optimization combinations numbers mathematical-optimization
考虑一下阵列 a
a = np.array([3, 3, np.nan, 3, 3, np.nan])
Run Code Online (Sandbox Code Playgroud)
我可以
np.isnan(a).argmax()
Run Code Online (Sandbox Code Playgroud)
但这需要找到所有np.nan只是为了找到第一个.
有更有效的方法吗?
我一直在试图弄清楚我是否可以传递一个参数,np.argpartition使np.nanget首先排序而不是last.
关于[dup]的编辑.
这个问题有几个不同的原因.
isnan.关于第二次[dup]的编辑.
解决平等和问题/答案仍然很老,很可能已经过时了.
由于赋值问题可以以单个矩阵的形式提出,如果numpy具有解决这种矩阵的函数,我就会徘徊.到目前为止,我没有找到.也许你们其中一个人知道numpy/scipy是否有一个赋值问题解决函数?
编辑:同时我在http://www.clapper.org/software/python/munkres/找到了一个python(不是numpy/scipy)实现.我仍然认为numpy/scipy实现可能会快得多,对吧?
我有以下邻接矩阵:
array([[0, 1, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 0]])
Run Code Online (Sandbox Code Playgroud)
可以这样画:
我的目标是确定连通图 ABC 和 DEFG。似乎深度优先搜索算法是我所需要的,而 Scipy实现了它。所以这是我的代码:
from scipy.sparse import csr_matrix
from scipy.sparse.csgraph import depth_first_order
import numpy as np
test = np.asarray([
[0, 1, 1, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我想计算两个二维阵列之间的地球移动距离(这些不是图像)。
现在我浏览了两个库:scipy ( https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wasserstein_distance.html ) 和pyemd ( https://pypi.org/project/pyemd / )。
#define a sampeling method
def sampeling2D(n, mu1, std1, mu2, std2):
#sample from N(0, 1) in the 2D hyperspace
x = np.random.randn(n, 2)
#scale N(0, 1) -> N(mu, std)
x[:,0] = (x[:,0]*std1) + mu1
x[:,1] = (x[:,1]*std2) + mu2
return x
#generate two sets
Y1 = sampeling2D(1000, 0, 1, 0, 1)
Y2 = sampeling2D(1000, -1, 1, -1, 1)
#compute the distance
distance = pyemd.emd_samples(Y1, Y2)
Run Code Online (Sandbox Code Playgroud)
虽然scipy …
请考虑以下数据帧.我想计算一个字符串中出现的'$'的数量.我str.count在pandas中使用该函数(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.count.html).
>>> import pandas as pd
>>> df = pd.DataFrame(['$$a', '$$b', '$c'], columns=['A'])
>>> df['A'].str.count('$')
0 1
1 1
2 1
Name: A, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我期待结果[2,2,1].我究竟做错了什么?
在Python中,count字符串模块中的函数返回正确的结果.
>>> a = "$$$$abcd"
>>> a.count('$')
4
>>> a = '$abcd$dsf$'
>>> a.count('$')
3
Run Code Online (Sandbox Code Playgroud) 这感觉像是必须足够常见的操作之一,这是一个重复的问题,但由于我无法在任何地方找到它:
在 Go 中用字符串表示替换 HTML 实体的最直接方法是什么string?也就是说,我将如何将字符串Rø&d grød & fløde变成Rød grød & fløde?
我自己的解决方案要么strings.Replace在所有相关实体上使用(这很快变得难以处理),要么将字符串包装到 XML 文档中并用xml.Decoder它解码(这看起来很愚蠢并导致许多边缘情况)。
用Python计算滚动(又称移动窗口)修剪平均值的最有效方法是什么?
例如,对于50K行和窗口大小为50的数据集,对于每行我需要取最后50行,删除顶部和底部3个值(窗口大小的5%,向上舍入),并获取其余44个值的平均值.
目前我正在为每一行切片以获取窗口,对窗口进行排序然后切片以修剪它.它运作缓慢,但必须有一个更有效的方式.
例
[10,12,8,13,7,18,19,9,15,14] # data used for example, in real its a 50k lines df
Run Code Online (Sandbox Code Playgroud)
窗口大小为5.对于每一行,我们查看最后5行,对它们进行排序并丢弃1个顶部和1个底部行(5%的5 = 0.25,向上舍入为1).然后我们平均剩下的中间行.
生成此示例的代码设置为DataFrame
pd.DataFrame({
'value': [10, 12, 8, 13, 7, 18, 19, 9, 15, 14],
'window_of_last_5_values': [
np.NaN, np.NaN, np.NaN, np.NaN, '10,12,8,13,7', '12,8,13,7,18',
'8,13,7,18,19', '13,7,18,19,9', '7,18,19,9,15', '18,19,9,15,14'
],
'values that are counting for average': [
np.NaN, np.NaN, np.NaN, np.NaN, '10,12,8', '12,8,13', '8,13,18',
'13,18,9', '18,9,15', '18,15,14'
],
'result': [
np.NaN, np.NaN, np.NaN, np.NaN, 10.0, 11.0, 13.0, 13.333333333333334,
14.0, 15.666666666666666
]
})
Run Code Online (Sandbox Code Playgroud)
天真实现的示例代码
window_size …Run Code Online (Sandbox Code Playgroud) 假设我有以下 C++ 继承的简单示例file.h:
class Base {};
class Derived : public Base {};
Run Code Online (Sandbox Code Playgroud)
然后,编译以下代码;也就是说,我可以分配std::shared_ptr<Derived>给std::shared_ptr<Base>:
Derived* foo = new Derived();
std::shared_ptr<Derived> shared_foo = std::make_shared<Derived>(*foo);
std::shared_ptr<Base> bar = shared_foo;
Run Code Online (Sandbox Code Playgroud)
假设我已将类型添加到 a 中decl.pxd:
cdef extern from "file.h":
cdef cppclass Base:
pass
cdef cppclass Derived(Base):
pass
Run Code Online (Sandbox Code Playgroud)
然后,我想做的是在 Cython 中模仿上面的 C++ 赋值file.pyx:
cimport decl
from libcpp.memory cimport make_shared, shared_ptr
def do_stuff():
cdef decl.Derived* foo = new decl.Derived()
cdef shared_ptr[decl.Derived] shared_foo = make_shared[decl.Derived](foo)
cdef shared_ptr[decl.Base] bar = …Run Code Online (Sandbox Code Playgroud) python ×9
numpy ×4
scipy ×3
graph ×2
optimization ×2
pandas ×2
c++ ×1
combinations ×1
cython ×1
dataframe ×1
distribution ×1
go ×1
graph-theory ×1
html ×1
inheritance ×1
max-flow ×1
numbers ×1
shared-ptr ×1
statistics ×1