问题:我使用SWIG在python中包装了一些c ++代码.在python方面,我想采用一个包装的c ++指针并将其向下转换为指向子类的指针.我在SWIG .i文件中添加了一个新的c ++函数来执行此向下转换,但是当我从python调用它时,我得到一个TypeError.
以下是详细信息:
我有两个c ++类,Base和Derived.Derived是Base的子类.我有一个第三类,Container,它包含一个Derived,并提供了一个访问器.访问器将Derived作为const Base&返回,如下所示:
class Container {
public:
const Base& GetBase() const {
return derived_;
}
private:
Derived derived_;
};
Run Code Online (Sandbox Code Playgroud)
我使用SWIG在python中包装了这些类.在我的python代码中,我想将Base引用向下转换为Derived.为此,我在swig .i文件中写了一个c ++中的辅助函数,它执行向下转换:
%inline %{
Derived* CastToDerived(Base* base) {
return static_cast<Derived*>(base);
}
%}
Run Code Online (Sandbox Code Playgroud)
在我的python代码中,我称之为向下转换函数:
base = container.GetBase()
derived = CastToDerived(base)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:
TypeError: in method 'CastToDerived', argument 1 of type 'Base *'
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?
作为参考,这里是SWIG生成的.cxx文件的相关位; 即原始函数,以及它的python-interface-ified doppelganger:
Derived* CastToDerived(Base* base) {
return static_cast<Derived*>(base);
}
// (lots of other generated code omitted)
SWIGINTERN PyObject *_wrap_CastToDerived(PyObject *SWIGUNUSEDPARM(self), PyObject *args) …Run Code Online (Sandbox Code Playgroud) 我已经为一个Scheme样式指南做了一些谷歌搜索,但没有提出像C++的Google样式指南那样易于引用和具体的东西.到目前为止我发现的最好的是这个家伙.那里的Scheme风格指南是好还是更好?
在Scheme中,函数(map fn list0 [list1 .. listN])带有限制,列表必须具有相同数量的元素.来自Python,我缺少Python列表推导的自由,它看起来很像map上面,但没有这个限制.
我很想实现一个替代的"my-map",它允许不同大小的列表,遍历所有列表的前N个元素,其中N是最短列表的长度.
例如,让我们num可以10和lst是(1 2 3).使用my-map,我希望编写如下表达式:
(my-map + (circular-list num) lst)))
Run Code Online (Sandbox Code Playgroud)
得到:
(11 12 13)
Run Code Online (Sandbox Code Playgroud)
我比阅读传统书更容易阅读本书
(map + (lambda (arg) (+ num arg)) lst)
Run Code Online (Sandbox Code Playgroud)
要么
(map + (make-list (length lst) num) lst)
Run Code Online (Sandbox Code Playgroud)
两个问题:
我在 .emacs 配置文件中发现了以下行:
(define-key scheme-mode-map "\e\t" 'scheme-smart-complete)
Run Code Online (Sandbox Code Playgroud)
它将键序列绑定\e\t到 function scheme-smart-complete,但我不知道\e是什么,而且事实证明这是不可能的(即使在周围加上引号也\e无助于搜索)。
什么是\e?
在CMakeLists.txt文件中,有没有办法检测可用的最高SSE级别,并将其保存到CMAKE_CXX_FLAGS?换句话说,我希望能够写出如下内容:
FindSSE() # defines SSE_FLAGS
set(CMAKE_CXX_FLAGS ${SSE_FLAGS})
Run Code Online (Sandbox Code Playgroud)
例如,如果平台支持最高SSE级别3,则FindSSE()会将SSE_FLAGS设置为-msse3.
我的项目中有两个目录:
project/
src/
scripts/
Run Code Online (Sandbox Code Playgroud)
“src”包含我精心编写的代码,“scripts”包含一次性的 Python 脚本。
我希望所有脚本都将“../src”添加到其 sys.path 中,以便它们可以访问“src”树下的模块。一种方法是编写一个 script/__init__.py 文件,其内容为:
scripts/__init__.py:
import sys
sys.path.append("../src")
Run Code Online (Sandbox Code Playgroud)
这可行,但会产生不必要的副作用,即将我的所有脚本放入名为“scripts”的包中。还有其他方法可以让我的所有脚本自动调用上述初始化代码吗?
我可以只编辑 .bashrc 中的 PYTHONPATH 环境变量,但我希望我的脚本能够开箱即用,而不需要用户摆弄 PYTHONPATH。另外,我不喜欢仅仅为了适应这个项目而进行整个帐户范围的更改。
我想将视频文件的帧加载到 numpy 数组中。我希望帧正确直立,这意味着我需要读取视频文件中的方向元数据,并相应地旋转加载的帧。
我有一种加载帧的方法(opencv 的 python 绑定),所以我需要的是一种读取视频文件方向元数据的方法。
我正在尝试使用在 Ubuntu 14.04 机器上运行的 python 读取从我的 iPhone 上记录的 .MOV 文件。
我看过的东西:
我在 Ubuntu 14.04 机器上运行代码,所以我正在寻找该平台上可用的库或命令行程序。
任何指针将不胜感激。
是否有axes.clear()的替代方法,可在擦除轴内容的同时保持轴标签不变?
上下文:我有一个交互式脚本,该脚本可翻阅一些流图,并使用axis.quiver()对每幅图进行绘制。如果在两次轴调用之间不调用axis.clear(),则每次quiver()调用只会向图中添加更多箭头,而无需先擦除之前添加的箭头。但是,当我调用axes.clear()时,它使轴标签变形。我可以重新设置它们,但这有点烦人。
我GOOGLEFINANCE()用来查询一组固定日期的历史美元/英镑汇率。
这工作正常,除了有时GOOGLEFINANCE返回#N/A,无论临时上游原因。发生这种情况时,#REF对于依赖这些汇率的所有单元格,我的电子表格将充满's。在上游数据源固定之前,该工作表是不可读的。这有时可能需要几个小时。
这种情况经常发生并且特别烦人,因为我不使用GOOGLEFINANCE检索时变数据。我只是将其用作历史汇率的静态数据集,因此理论上我根本没有理由刷新数据。
有没有办法在本地缓存的历史汇率在我的床单,并依傍如果这些值GOOGLEFINANCE的回报#N/A?
(如果GOOGLEFINANCE改变对历史汇率的看法,自动更新缓存值的奖励积分。)
有没有办法从一维数组切割零维子阵列?
例如,如果我有一个N维ndarray arr,则arr[0]返回一个(N-1)维ndarray.
但是,如果我有1维ndarray x,x[0]则不返回0维ndarray,而是返回a numpy.int64,(如果x包含int64s).
最小的例子:
def increment(zero_d_array):
zero_d_array[...] = zero_d_array + 1
counter = numpy.array(0) # a zero-dimensional array containing scalar 0
increment(counter) # success; counter is now 1
counters = numpy.zeros(3, dtype=int) # [0, 0, 0]
increment(counter[1]) # fails; counter[1] is a numpy.int64, not a 0-D array
Run Code Online (Sandbox Code Playgroud)
我意识到上面的方法可以使用increment(counter[1:2]),但只是因为increment()碰巧适用于0-D和1-D输入.并非所有功能都会如此灵活.
python ×4
scheme ×2
build ×1
c++ ×1
cmake ×1
coding-style ×1
dot-emacs ×1
downcast ×1
escaping ×1
exif ×1
lisp ×1
map-function ×1
matplotlib ×1
metadata ×1
numpy ×1
orientation ×1
pythonpath ×1
scripting ×1
slice ×1
sse ×1
swig ×1
typeerror ×1
video ×1