小编fug*_*ede的帖子

用于Python的快速max-flow min-cut库

是否有一个可靠且记录良好的Python库,可快速实现一种算法,可以在有向图中找到最大流量和最小切割量?

来自python-graph的pygraph.algorithms.minmax.maximum_flow解决了这个问题,但速度很慢:在一个有4000个节点和11000个边缘的有向图中查找最大流量和最小切割需要> 1分钟.我正在寻找至少快一个数量级的东西.

赏金:我在这个问题上提供了一笔赏金,看看自从提出这个问题以来情况是否发生了变化.如果您对自己推荐的图书馆有个人经验,可以获得奖励积分!

python graph-theory graph mathematical-optimization max-flow

18
推荐指数
3
解决办法
1万
查看次数

找到三个整数,使得它们的余弦值之和变为最大值

有三个整数x,y并且z(每个> = 1)和给定的上限整数n<10 ^ 6.还有,n = x + y + zoutput = 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

16
推荐指数
2
解决办法
712
查看次数

找到第一个np.nan值的最有效方法是什么?

考虑一下阵列 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]的编辑.
这个问题有几个不同的原因.

  1. 这个问题和答案涉及价值观的平等.这是关于isnan.
  2. 那些答案都遭遇了我的答案面临的同样问题.请注意,我提供了一个完全有效的答案,但强调它的效率低下.我正在寻找解决效率低下的问题.

关于第二次[dup]的编辑.

解决平等和问题/答案仍然很老,很可能已经过时了.

python numpy

13
推荐指数
3
解决办法
915
查看次数

分配问题,一个numpy函数?

由于赋值问题可以以单个矩阵的形式提出,如果numpy具有解决这种矩阵的函数,我就会徘徊.到目前为止,我没有找到.也许你们其中一个人知道numpy/scipy是否有一个赋值问题解决函数?

编辑:同时我在http://www.clapper.org/software/python/munkres/找到了一个python(不是numpy/scipy)实现.我仍然认为numpy/scipy实现可能会快得多,对吧?

python optimization numpy combinatorics scipy

12
推荐指数
4
解决办法
8361
查看次数

使用 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)

python numpy graph scipy

9
推荐指数
1
解决办法
3307
查看次数

二维数组的 Python Earth Mover 距离

我想计算两个二维阵列之间的地球移动距离(这些不是图像)。

现在我浏览了两个库: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 …

python statistics distribution scipy earth-movers-distance

8
推荐指数
1
解决办法
3831
查看次数

熊猫str.count

请考虑以下数据帧.我想计算一个字符串中出现的'$'的数量.我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)

python pandas

7
推荐指数
2
解决办法
4059
查看次数

替换 Go 字符串中的 HTML 实体

这感觉像是必须足够常见的操作之一,这是一个重复的问题,但由于我无法在任何地方找到它:

在 Go 中用字符串表示替换 HTML 实体的最直接方法是什么string?也就是说,我将如何将字符串R&oslash;&d gr&oslash;d &amp; fl&oslash;de变成Rød grød & fløde

我自己的解决方案要么strings.Replace在所有相关实体上使用(这很快变得难以处理),要么将字符串包装到 XML 文档中并用xml.Decoder它解码(这看起来很愚蠢并导致许多边缘情况)。

html go

7
推荐指数
1
解决办法
2339
查看次数

Python的高效滚动修剪意味着

用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)

python numpy moving-average dataframe pandas

7
推荐指数
2
解决办法
752
查看次数

Cython 中的继承和 std::shared_ptr

假设我有以下 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)

c++ python inheritance cython shared-ptr

7
推荐指数
1
解决办法
1110
查看次数