小编use*_*198的帖子

排序可以连接形成多边形的混洗点(在python中)

我有一组点连接在2D笛卡尔空间中形成一个多边形.它以元组的python列表的形式出现

[(x1, y1), (x2, y2), ... , (xn, yn)]
Run Code Online (Sandbox Code Playgroud)

问题是连接它们并在图形中形成一个多边形.(我正在使用matplotlib.path)

我做了一个功能来做到这一点.它的工作原理如下:

它转到第一个点即(x1,y1)并将一条线连接到下一个点即(x2,y2)和一条线从(x2,y2)到(x3,y3)等等......直到结束为止( xn,yn).它通过将(xn,yn)连接到(x1,y1)来关闭多边形.

问题是包含这些点的列表不包含正确顺序的点,因此会导致像这样的坏图(每个闭合的多边形都会自动着色).

例:

对于此顶点列表=`[( - 0.500000050000005,-0.5),( - 0.499999950000005,0.5),( - 0.500000100000005,-1.0),( - 0.49999990000000505,1.0),( - 0.500000050000005,-0.5),( - 1.0000000250000025, - 0.5),(1.0000000250000025,-0.5),(0.499999950000005,0.5),( - 0.9999999750000024,0.5),( - 0.9999999750000024,0.5),(0.500000100000005,-1.0),(0.49999990000000505,1.0),( - 1.0,0.0),( -0.0,-1.0),(0.0,1.0),(1.0,0.0),( - 0.500000050000005,-0.5)]

要点: 在此输入图像描述

点数不良导致: 在此输入图像描述

正确的加入方式: 在此输入图像描述

是否有任何好的(如果可能的话)简单的算法来重新排序点以正确的顺序?`

python geometry matplotlib python-2.7

13
推荐指数
2
解决办法
5437
查看次数

非常慢的cython课程?

此代码包含cython类:

cdef class Bench:
    cdef long n
    def __cinit__(self, long n):
    self.n = n

    cpdef int factors(self):
        n = self.n
        cdef int fac = 0
        cdef unsigned long i
        for i in range(2, n):
            if n % i == 0:
                fac += 1

        return fac


if __name__ == "__main__":
    print "hw"
Run Code Online (Sandbox Code Playgroud)

编译成python扩展后我打电话给这个:

from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
Run Code Online (Sandbox Code Playgroud)

它打印出207.374788046(秒)

但是纯python版本(只有函数和对它的调用)在~77s运行,没有类结构的cython代码在~10.2s运行

cython中的无类版本:

cdef int factors(unsigned long …
Run Code Online (Sandbox Code Playgroud)

python performance class cython

6
推荐指数
1
解决办法
2543
查看次数

递归地在python中实现'最小硬币数'

这个问题与此处提出的问题相同.

给出一个硬币列表,它们的值(c1,c2,c3,... cj,...)和总和i.找到总和为i的最小硬币数量(我们可以使用我们想要的一种类型的硬币),或者报告不可能以这样的方式选择硬币,使得它们总和为S.

我昨天刚刚介绍了动态编程,我试图为它编写代码.

# Optimal substructure: C[i] = 1 + min_j(C[i-cj])
cdict = {}
def C(i, coins):

    if i <= 0:
        return 0

    if i in cdict:
        return cdict[i]
    else:
        answer = 1 + min([C(i - cj, coins) for cj in coins])
        cdict[i] = answer
        return answer
Run Code Online (Sandbox Code Playgroud)

在这里,C [i]是金额'i'的最佳解决方案.对于程序,可用的硬币是{c1,c2,...,cj,...},我增加了递归限制以避免超出最大递归深度误差.但是,这个程序只给出了正确的答案,当一个解决方案不可能时,它并没有表明这一点.

我的代码有什么问题以及如何纠正它?

python algorithm dynamic-programming

4
推荐指数
1
解决办法
5627
查看次数

在linux中使用bash查找文件夹中的所有音频文件

当我使用带ls命令的通配符时,它可以工作.

$ ls '*.{mp3,ogg}'  # Showing only two formats in the command
cannot access *.mp3: No such file or directory
1.ogg 2.ogg 3.ogg
Run Code Online (Sandbox Code Playgroud)

但使用find命令不起作用

$ find ~ -iname '*.{mp3,ogg}'
Run Code Online (Sandbox Code Playgroud)

这行中的错误是什么?

linux bash ls find

4
推荐指数
1
解决办法
8132
查看次数