我正在用Python和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++编写一些复杂的FFT算法,因此我需要实现四元数和Hamilton-Eisenstein代码等代数结构.算法适用于该结构的2D数组.将它们作为类实现的开销是多少?换句话说,我应该用[M] [N]维创建包含四元数类的数组,还是应该创建[M] [N] [4]数组并使用[4]数组作为四元数?使用类更方便,但是创建M*N类并访问它们的方法而不是仅使用数组 - 这不是太多的开销吗?我正在编写用于大型图像处理的算法,因此性能对我来说很重要.
我有一个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?
想象一下,我们有一组整数.我们不知道,我们唯一知道的是每个数字都在区间[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)中没有数字.)尝试次数最少的算法将是答案.
python ×3
algorithm ×2
c ×1
c++ ×1
class ×1
inline ×1
integer ×1
namespaces ×1
optimization ×1
overhead ×1
parameters ×1
performance ×1
quaternions ×1
scipy ×1
search ×1
self ×1
set ×1