小编zeu*_*300的帖子

使用Python进行B样条插值

我试图用Python重现B样条的Mathematica示例.

mathematica示例的代码读取

pts = {{0, 0}, {0, 2}, {2, 3}, {4, 0}, {6, 3}, {8, 2}, {8, 0}};
Graphics[{BSplineCurve[pts, SplineKnots -> {0, 0, 0, 0, 2, 3, 4, 6, 6, 6, 6}], Green, Line[pts], Red, Point[pts]}]
Run Code Online (Sandbox Code Playgroud)

并产生我所期望的.现在我尝试用Python/scipy做同样的事情:

import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as si

points = np.array([[0, 0], [0, 2], [2, 3], [4, 0], [6, 3], [8, 2], [8, 0]])
x = points[:,0]
y = points[:,1]

t = range(len(x))
knots = [2, 3, 4]
ipl_t …
Run Code Online (Sandbox Code Playgroud)

python bspline

12
推荐指数
2
解决办法
2万
查看次数

使从boost-python类继承的Python类具有可复制性

我有一个继承自boost-python类的类:

class Magnet(CMagnet):   # CMagnet is a C++ based boost-python class
    def __init__(self):
        CMagnet.__init__(self)

    def python_method(self):
        ...
Run Code Online (Sandbox Code Playgroud)

在CMagnet的C ++实现中,我使用了1中的代码,如2中所示

我现在遇到以下问题:执行以下操作时:

magnet = Magnet()
magnet_2 = copy.deepcopy(magnet)
Run Code Online (Sandbox Code Playgroud)

然后magnet是类型Magnetmagnet_2但是是类型CMagnet。我需要它也要类型Magnet。它缺少所有Magnet方法。如何获得Deepcopy来复制(并返回)整个Magnet对象,而不仅仅是CMagnet零件的副本?

python deep-copy boost-python

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

编译boost时地址模型错误

我编写了一个混合 Python 3 和 C++ 的程序。我在 Windows 上使用 boost-python 1.62 和 mingw。到目前为止,我已经在许多机器上编译了 C++ python 库,并且它一直运行良好。现在我将源代码提供给一位同事在他的机器上安装,编译失败,mingw 抱怨符号问题和“文件格式无法识别”。

但是,我看到的是以下内容:在我的机器上,b2 在编译开始时报告了这一点:

  • 32 位:无(缓存)
  • 64 位:是(缓存)
  • 手臂:否(缓存)
  • mips1 : 没有(缓存)
  • 电源:否(缓存)
  • sparc : 没有(缓存)
  • x86 : 是(缓存)
  • 支持符号链接:是

在我同事的机器上,它看起来像这样:

  • 32 位:是(缓存)
  • 手臂:否(缓存)
  • mips1 : 没有(缓存)
  • 电源:否(缓存)
  • sparc : 没有(缓存)
  • x86 : 是(缓存)
  • 支持符号链接:是

我很确定问题与他的系统试图编译 32 位代码并试图将现有的 64 位代码链接到它有关。不过,问题是,为什么它首先要尝试编译 32 位代码?机器不到一年,所以肯定是64位的。然而,更重要的问题是,如何说服机器使用 64 位进行编译?

顺便说一下,这是我的 user-config.jam:

using python : 3.6 : C:\\StreamTest\\WinPython-64bit-3.6.6.2\\python-3.6.6.amd64\\python.exe
  : C:\\StreamTest\\WinPython-64bit-3.6.6.2\\python-3.6.6.amd64\\include
  : C:\\StreamTest\\WinPython-64bit-3.6.6.2\\python-3.6.6.amd64\\libs
  : ;
Run Code Online (Sandbox Code Playgroud)

python boost mingw boost-python

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

使用lambda表达式连接pyqt中的插槽

我正在尝试使用lambda函数连接插槽,但它没有按照我期望的方式工作.在下面的代码中,我成功正确连接前两个按钮.对于我在循环中连接的后两个,这是错误的.在我之前有人有同样的问题(Qt - 使用lambda连接带有参数的插槽),但这个解决方案对我不起作用.我一直盯着我的屏幕半小时,但我无法弄清楚我的代码是如何不同的.

class MainWindow(QtGui.QWidget):
    def __init__(self):
        super(QtGui.QWidget, self).__init__()

        main_layout = QtGui.QVBoxLayout(self)

        # Works:
        self.button_1 = QtGui.QPushButton('Button 1 manual', self)
        self.button_2 = QtGui.QPushButton('Button 2 manual', self)
        main_layout.addWidget(self.button_1)
        main_layout.addWidget(self.button_2)

        self.button_1.clicked.connect(lambda x:self.button_pushed(1))
        self.button_2.clicked.connect(lambda x:self.button_pushed(2))

        # Doesn't work:
        self.buttons = []
        for idx in [3, 4]:
            button = QtGui.QPushButton('Button {} auto'.format(idx), self)
            button.clicked.connect(lambda x=idx: self.button_pushed(x))
            self.buttons.append(button)
            main_layout.addWidget(button)


    def button_pushed(self, num):
        print 'Pushed button {}'.format(num)
Run Code Online (Sandbox Code Playgroud)

按下前两个按钮会产生'Pushing button 1'和'Pushing button 2',另外两个按钮都会产生'Pushed button False',虽然我预计会有3和4.

我还没有完全理解lambda机制.究竟有什么联系?指向由lambda生成的函数的指针(使用参数替换)或者是在信号触发时评估的lambda函数?

python lambda pyqt

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

在 NSIS 脚本中获取 PATH 变量

我不知道如何获取 NSIS 脚本中的 PATH 变量。这是我尝试过的,但它在 $0 中返回“错误”:

nsExec::ExecToStack 'echo %PATH%'
Pop $0
MessageBox MB_OK "$0"
Run Code Online (Sandbox Code Playgroud)

还尝试用 $s 转义 % 符号,但无济于事。仅放置一些字符串而不是 %PATH% 也不起作用。我看到一个建议的示例,就像这个使用 Exec 而不是 ExecToStack 的示例,但这也不起作用。我缺少什么?

nsis environment-variables

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

检查字符串是否以分号结尾

我正在将文件路径添加到 Windows 上的 PATH 变量中。在某些情况下,现有的 PATH 似乎以分号结尾,有时则不然。因此,在添加路径之前我必须检查这一点,否则我可能会得到一个包含两个分号的 PATH 字符串。由于某种原因我不明白,有 ;; 在你的 PATH 中会产生问题。现在的问题是:如何检查字符串是否以分号结尾?举个例子,我尝试过:

set test_1=bla;
set test_2=%test_1:~-1%
if %test_2% EQU ^; echo hello
Run Code Online (Sandbox Code Playgroud)

但如果 test_2 包含分号,则不起作用。

cmd compare batch-file

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