相关疑难解决方法(0)

将Python编译为机器代码是否可行?

将Python(可能通过中间C表示)编译成机器代码是否可行?

据推测,它需要链接到Python运行时库,Python标准库的任何Python部分本身都需要编译(并链接).

此外,如果您想对表达式进行动态评估,则需要捆绑Python解释器,但也许不允许这样做的Python子集仍然有用.

它会提供任何速度和/或内存使用优势吗?据推测,Python解释器的启动时间将被消除(尽管共享库仍需要在启动时加载).

c python linker compilation

123
推荐指数
8
解决办法
8万
查看次数

尽管下面两个函数的时间复杂度似乎相似,但为什么性能会有巨大差异?

我正在尝试评估对数字列表进行排序的两个Python方法的性能。两者的时间复杂度似乎均为n ^ 2,但经验数据表明,其中一个的性能优于另一个。有什么原因吗?

我写了两种方法,一种使用嵌套的for循环,另一种方法是找到一个最大值并将该max迭代添加到新列表中(并从旧列表中删除)。

方法1:

def mysort1(l):
    i = 0
    j = 1
    for i in range(0,len(l)-1):
        for j in range(i,len(l)):
            if l[i] > l[j]:
                tmp = l[j]
                l[j] = l[i]
                l[i] = tmp
    return l
Run Code Online (Sandbox Code Playgroud)

方法2:

def mysort2(l):
    nl = []
    for i in range(0,len(l)):
        m = max(l)
        nl.insert(0, m)
        l.remove(m)
    return nl

Run Code Online (Sandbox Code Playgroud)

两者均以相反的顺序用10000个数字进行了测试。使用配置文件时,方法1大约需要8秒(10000次以上的调用),方法2仅需要0.6秒(30000次以上的调用)。尽管两种方法的时间复杂度相同,但为什么方法2的性能比方法1更好的任何原因?

python time-complexity

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

相似代码之间在numpy中存在巨大的速度差异

为什么以下L2范数计算之间的速度差异如此之大:

a = np.arange(1200.0).reshape((-1,3))

%timeit [np.sqrt((a*a).sum(axis=1))]
100000 loops, best of 3: 12 µs per loop

%timeit [np.sqrt(np.dot(x,x)) for x in a]
1000 loops, best of 3: 814 µs per loop

%timeit [np.linalg.norm(x) for x in a]
100 loops, best of 3: 2 ms per loop
Run Code Online (Sandbox Code Playgroud)

据我所知,这三个结果均相同。

这是numpy.linalg.norm函数的源代码:

x = asarray(x)

# Check the default case first and handle it immediately.
if ord is None and axis is None:
    x = x.ravel(order='K')
    if isComplexType(x.dtype.type):
        sqnorm = dot(x.real, x.real) + dot(x.imag, x.imag) …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

5
推荐指数
1
解决办法
658
查看次数

为什么python中的普通循环运行速度比C++中的慢?以及如何优化?

简单地在python和C++中运行一个近空的for循环(如下所示),速度非常不同,python慢​​了一百多倍.

a = 0
for i in xrange(large_const):
  a += 1
Run Code Online (Sandbox Code Playgroud)
int a = 0;
for (int i = 0; i < large_const; i++)
  a += 1;
Run Code Online (Sandbox Code Playgroud)

另外,我该怎么做才能优化python的速度?

(另外:我在这个问题的第一个版本中做了一个不好的例子,我并不是说a = 1因此C/C++编译器可以优化它,我的意思是循环本身消耗了大量资源(也许我应该使用+ = 1作为示例.. ..我的意思是如何优化是如果for循环就像一个+ = 1那么简单,它怎么能以与C/C++类似的速度运行?在我的练习,我使用了Numpy所以我不能再使用pypy了(现在),是否有一些通用的方法可以更快地制作循环(例如生成列表中的生成器)?)

c c++ python optimization performance

4
推荐指数
2
解决办法
2745
查看次数

Python vs CPP: Why is the difference in speed so huge?

def main():
    i = 2
    sum = 1
    while i < 100000:
        j = 2
        while j < i:
            if i%j == 0:
                sum += 1
                break
            j += 1
        i += 1

    print(sum)


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)
#include<iostream>

using namespace std;

int main() {
    int sum = 1;
    for (int i=2; i<100000; i++) {
        for (int j=2; j<i; j++) {
            if (i%j == 0) {
                sum++;
                break;
            }
        }
    }
    cout << sum << endl;
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ python performance

3
推荐指数
2
解决办法
323
查看次数

鉴于这段代码,为什么python版本比C语言慢100倍?

我正在做项目euler Q14.

哪个起始编号低于一百万,产生最长的collat​​z链?

看到有人能在0.7秒内获得成绩,我感到非常惊讶.当我看到它只是一个天真的蛮力解决方案时更加惊讶.

我怀疑是因为我花了很多时间来优化我的python版本,将运行时间降低到大约一分钟.所以我自己运行代码...... OP没有说谎.

我将相同的代码翻译成Python,5分钟后无法终止.

是什么赋予了?

C版:http://codepad.org/VD9QJDkt

#include <stdio.h>
#include <time.h>

int main(int argc, char **argv)
{
  int longest = 0;
  int terms = 0;
  int i;
  unsigned long j;
  clock_t begin, end;
  double time_spent;

  begin = clock();

  for (i = 1; i <= 1000000; i++)
  {
    j = i;
    int this_terms = 1;

    while (j != 1)
    {
      this_terms++;

      if (this_terms > terms)
      {
        terms = this_terms;
        longest = i;
      }

      if (j % …
Run Code Online (Sandbox Code Playgroud)

c python performance code-translation

2
推荐指数
1
解决办法
355
查看次数