这在cx_Freeze邮件列表中出现了很多次
(看到
在我看来它应该是一个简单的解决方案,但我看不出如何开始.
我有一个python应用程序,它依赖于scipy,wxpython,numpy和一堆其他的包,每个包都有很多动态链接的库.主可执行文件夹变得非常混乱PYD和DLL文件,甚至很难在所有文件中找到可执行文件.我的用户并不是特别精通计算机,因此清晰度非常重要.
我不需要像bbfreeze理论上可以生成的单个可执行文件.我喜欢distutils setup.py文件如何与cx_Freeze一起工作,并且在其他方面cx_Freeze非常出色.
我想要的只是一种清理主可执行文件夹的方法.我非常乐意将DLL文件手动移动到freeze_libs文件夹或其他内容,然后重新设置共享库加载路径以帮助它找到动态库(如果可能的话).或类似的东西.
谢谢
这是我的基本问题:
我有一个导入的Python文件
from math import sin,cos,sqrt
Run Code Online (Sandbox Code Playgroud)
我需要这个文件仍然是100%CPython兼容,以允许我的开发人员编写100%CPython代码并使用为Python开发的伟大工具.
现在进入Cython.在我的Python文件中,trig函数被调用数百万次(代码的基础,不能改变它).有没有办法通过主python文件中的一些Python-fu,或Cython魔术,否则我可以改为使用C/C++数学函数使用Cython代码的一些变体
cdef extern from "math.h":
double sin(double)
Run Code Online (Sandbox Code Playgroud)
这会给我近乎C的性能,这将是非常棒的.
斯特凡的谈话具体说明不能做到这一点,但谈话已经两年了,那里有很多有创意的人
我正在尝试使用h5py模块将一组深度嵌套的类,属性,绑定方法等编写到HDF5文件中以进行长期存储.我真的很亲密 我似乎无法解决的唯一问题是以编程方式在运行时找出一种方法来确定某些东西是否是类实例类型,而不是列表,int等.我需要递归到类实例,但显然不应该递归到int,float等.这需要适用于旧式和新式类.我研究过的东西不起作用/我无法开始工作:
使用检查模块
>>> class R(object): pass
...
>>> _R = R()
>>> import inspect
>>> inspect.isclass(_R)
False
>>> inspect.isclass(R)
True
Run Code Online (Sandbox Code Playgroud)
这没用,我需要一个像inspect.isclassinstance(_R)返回的函数True
使用类型模块
如果使用旧式类,则会有一个名为InstanceType的类型,它匹配旧式类的实例,如下面的代码所示
>>> import types
>>> class R(): pass #old-style class
...
>>> _R = R()
>>> import types
>>> type(_R) is types.InstanceType
True
>>> class R(object): pass #new-style class
...
>>> _R = R()
>>> type(_R) is types.InstanceType
False
Run Code Online (Sandbox Code Playgroud)
但是如果使用新式类,则没有相应的类型 types
我在cython中编写了一个函数,它将搜索给定字符串的字符串的STL向量,如果找到则返回true,否则返回false.性能在这里非常重要!理想情况下,我希望有一个模板化的函数来做同样的事情,所以我不必为每种数据类型编写函数.我确信这是可能的,但我不知道模板化函数的cython语法.(我知道如何在c ++中完成)
from libcpp cimport bool
from libcpp.string cimport string
from libcpp.vector cimport vector
from cython.operator cimport dereference as deref, preincrement as inc
cpdef bool is_in_vector(string a, vector[string] v):
cdef vector[string].iterator it = v.begin()
while it != v.end():
if deref(it) == a:
return True
#Increment iterator
inc(it)
return False
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我一把吗?
我有一个应用程序,我绝对必须使用long double数据类型,因为在进行双精度数学运算时会出现灾难性截断错误.我的测试程序很疯狂,因为在windows上,使用Visual Studio的双倍只是一个双倍的别名,而在Linux和OSX上,long double是一个真正的长双精度,标称精度为1e-19.
在mingw(GCC的Windows端口)是我感到困惑的地方.Mingw声称LDBL_EPSILON的精度为1e-19,但googleing表明mingw使用的c运行时实际上只是微软c运行时,它不支持真正的长双精度.任何人都可以在这里发光吗?
编辑:问题的症结在于:在mingw上,如果我调用数学函数log(long double x),这只是一个别名log(double x)吗?在任何一种情况下,我如何编写自己的脚本来测试此行为和/或测试它?
我的问题很简单,希望也有一个很好的答案:当我有一个构造的Eigen::MatrixXd矩阵时,我可以使用多个线程同时填充矩阵中的行吗(如果我可以确保没有同时写入任何行),或者我必须在每个线程中创建临时行对象,然后将它们复制(呃......)到矩阵中作为减少操作?
我的经验(和其他一些人一样:如何从使用LAPACK的矩阵对的广义Schur因子分解中得到指定的特征向量?)是从Eigen(我不关心特征向量)获得的特征值不像那些那样可靠当矩阵病态时,从numpy,matlab等获得.
互联网(https://www.mathworks.com/help/matlab/ref/balance.html)表明平衡是解决方案,但我无法弄清楚如何在Eigen中做到这一点.有人可以帮忙吗?
目前我有一个讨厌的双层解决方案,涉及python和C++,我想把所有内容都推到C++中; 特征值求解器是阻碍我的唯一部分.
我正在尝试使用Eigen对一些网格数据进行双三次插值,我无法弄清楚如何将系数的16x1列向量重新整形为4x4矩阵.理想情况下,我想在没有任何复制的情况下按照https://bitbucket.org/eigen/eigen/pull-request/41/reshape/diff的方式做一些事情,但我无法对文档做出正面或反面.或者,地图也可以,但我无法弄清楚如何在现有矩阵上使用地图.
更多信息:http://en.wikipedia.org/wiki/Bicubic_interpolation
/// The inverse of the A matrix for the bicubic interpolation
/// (http://en.wikipedia.org/wiki/Bicubic_interpolation)
static const double Ainv_data[16*16] = {
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-3, 3, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, -2, 0, 0, 1, 1, …Run Code Online (Sandbox Code Playgroud)