我最近通过重命名所有模块(除了顶级Cythonized我的一个项目__init__.py)来*.pyx,并通过把ext_modules = [Extension('foo', ['foo.pyx'])]在setup.py.建筑和安装工作正常.但是,当我这样做时cd doc; make html,Sphinx失败了,因为它无法导入任何现在的模块*.pyx.
如果我编辑doc/conf.py并更改sys.path.insert(0, os.path.abspath('..'))为sys.path.insert(0, os.path.abspath('../build/temp.linux-x86_64-2.7')),那么Sphinx可以找到所有模块并可以生成文档,但在这种情况下我会收到类似的错误error while formatting arguments for foo.bar: <built-in function bar> is not a Python function.大概这是因为现在Sphinx只能访问*.so文件,而不是源文件.同样的sys.path修改还允许通过Sphinx(make doctest)运行doctests .
我尝试其他溶液使用扩展*.py,而不是*.pyx(和使用ext_modules = [Extension('foo', ['foo.py'])]中setup.py).在这种情况下,文档正确构建,但我认为doctests现在绕过Cython.
我无法在网上找到有关一起使用Sphinx和Cython的任何信息.我查看了一些使用两者的项目的源代码,但它们似乎没有在*.pyx文件中使用docstrings .我知道Sage确实如此,但是这个项目太复杂了我不能分开.
Sphinx是否支持Cython文件中的文档字符串?如果是这样,我该如何工作呢?
我经常要解决非线性问题,其中变量的数量超过了约束的数量(或者有时反过来).通常,一些约束或变量以复杂的方式冗余.有什么方法可以解决这些问题吗?
大多数scipy求解器似乎假设约束的数量等于变量的数量,并且Jacobian是非奇异的. leastsq有时可以工作但是当约束少于变量数时它甚至都没有尝试.我意识到,我可以只运行fmin在linalg.norm(F),但这是效率远远低于它利用雅可比的任何方法.
这是一个问题的例子,它说明了我在说什么.它显然有一个解决方案,但leastsq给出了一个错误.当然,这个例子很容易手工解决,我只是把它放在这里来证明这个问题.
import numpy as np
import scipy.optimize
mat = np.random.randn(5, 7)
def F(x):
y = np.dot(mat, x)
return np.array([ y[0]**2 + y[1]**3 + 12, y[2] + 17 ])
x0 = np.random.randn(7)
scipy.optimize.leastsq(F, x0)
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息是:
Traceback (most recent call last):
File "question.py", line 13, in <module>
scipy.optimize.leastsq(F, x0)
File "/home/dstahlke/apps/scipy/lib64/python2.7/site-packages/scipy/optimize/minpack.py", line 278, in leastsq
raise TypeError('Improper input: N=%s must not exceed M=%s' % (n,m))
TypeError: Improper input: N=7 must not exceed …Run Code Online (Sandbox Code Playgroud)