小编use*_*893的帖子

优化时保留代码可读性

我正在用Python和C编写一个带有一些复杂物理模拟算法的科学程序.在实现算法之后,我发现有很多可能的优化来提高性能.常见的是预先计算值,使计算超出周期,用更复杂的替代简单矩阵算法等.但是出现了一个问题.未经优化的算法要慢得多,但其逻辑和与理论的联系看起来更加清晰和可读.此外,扩展和修改优化算法更加困难.

所以,问题是 - 我应该使用哪些技术来提高可读性,同时提高性能?现在我试图保持快速和清晰的分支并且并行开发它们,但也许有更好的方法?

python algorithm optimization performance code-readability

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

如何将scipy.weave.inline与外部C库一起使用?

我试图理解weave.inline在我的Python程序中包装C代码.下面的代码简单地使用Numpy数组并将其所有元素乘以2.

inl.py

import numpy
import scipy.weave

a = numpy.array([1.0, 2.0, 3.0])
N = a.shape[0]

print a
code = \
  """
  int i;
  for(i = 0; i < N; i++)
  {
    a[i] = a[i] * 2;
  }
  """

scipy.weave.inline(code, ['a','N'])
print a
Run Code Online (Sandbox Code Playgroud)

然后我想将内联代码中的一些函数传递给外部库.让它成为2的琐碎乘法.所以我创建了两个文件:

mult.c

#include "mult.h"

float mult(float n)
{
  return n * 2;
}
Run Code Online (Sandbox Code Playgroud)

mult.h

float inc(float n);
Run Code Online (Sandbox Code Playgroud)

现在我想在我的内联代码中使用函数mult.但我不知道如何将我的C文件与Python内联代码链接起来.我试图将C文件编译为共享库,并将它们作为头文件和库传递,但这是徒劳的.有什么建议?

c python inline scipy

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

在C++中使用类代数结构矩阵的开销

我使用C++编写一些复杂的FFT算法,因此我需要实现四元数和Hamilton-Eisenstein代码等代数结构.算法适用于该结构的2D数组.将它们作为类实现的开销是多少?换句话说,我应该用[M] [N]维创建包含四元数类的数组,还是应该创建[M] [N] [4]数组并使用[4]数组作为四元数?使用类更方便,但是创建M*N类并访问它们的方法而不是仅使用数组 - 这不是太多的开销吗?我正在编写用于大型图像处理的算法,因此性能对我来说很重要.

c++ class overhead quaternions algebraic-data-types

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

Python:如何将某个对象的命名空间导入当前命名空间?

我有一个Python类,它包含几个嵌套的参数组:

class MyClass(object):
    #some code to set parameters

    def some_function(self):
        print self.big_parameter_group.small_parameter_group.param_1
        print self.big_parameter_group.small_parameter_group.param_2
        print self.big_parameter_group.small_parameter_group.param_3
Run Code Online (Sandbox Code Playgroud)

我想减少访问参数所需的代码.我应该在some_function的顶部放置什么来简单地通过名称访问参数(param_1,param_2,param_3)?我应该在MyClass中放置什么来为其所有方法应用此快捷方式,而不仅仅是some_function?

python parameters namespaces self

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

如果我们被告知最接近或等于我们告诉的数字,那么找到一组整数的高效算法

想象一下,我们有一组整数.我们不知道,我们唯一知道的是每个数字都在区间[0,MAX],显然,数字不重复.然后,我们需要找到一个集合.我们被允许命名一个整数,然后我们被告知一个集合中的数字,它小于或等于我们选择的数字并且最接近它.我们的目的是找到一组尝试次数最少的集合.

例如,让我们设置[0,7,8,1000]和MAX == 10000.让TRY成为我们可以使用的功能.然后TRY(4)== 0,TRY(7)== 7,TRY(8)== 8,TRY(555)== 8和TRY(7777)== 1000.然后我们必须确保我们没有错过任何数字,所以我们必须尝试许多其他数字.

问题是:找到集合的最有效算法是什么?尝试间隔中的每个数字显然都很糟糕.也许我们应该尝试一种类似二进制搜索的算法,它排除集合,保证没有数字(TRY(7777)== 1000,因此(1000,7777)中没有数字.)尝试次数最少的算法将是答案.

algorithm search integer set

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