小编dmy*_*tro的帖子

Cython中的抽象类(使用纯虚方法)

快速版: 如何在Cython中声明一个抽象类?目标是仅声明接口,以便其他类可以从中继承,必须没有此类的实现.

interface.pxd:

cdef class IModel:
    cdef void do_smth(self)
Run Code Online (Sandbox Code Playgroud)

impl.pyx:

from interface cimport IModel

cdef class A(IModel):
    cdef void do_smth(self):
        pass
Run Code Online (Sandbox Code Playgroud)

一切都很好编译,但当我impl.so在python中导入时,我得到以下内容:

ImportError: No module named interface
Run Code Online (Sandbox Code Playgroud)

显然这个方法不是真正的虚拟和python想要IModel的实例

更多细节:

我有一个cython扩展类(cdef class Integrator),它应该在任何实例上运行,实现IModel接口.界面只是确保实例具有方法void get_dx(double[:] x, double[:] dx),以便集成商可以在每个集成步骤中调用它,以便集成模型.我们的想法是,可以在cython中实现不同的模型,然后以交互方式集成它们并在python脚本中绘制结果.像那样:

from integrator import Integrator # <-- pre-compiled .so extension
from models import Lorenz         # <-- also pre-compiled one, which inherits
                                  # from IModel

mod = Lorenz() …
Run Code Online (Sandbox Code Playgroud)

c++ python oop cython

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

带有numpy/ctypes的环形缓冲区

我正在开发一个客户端,它将通过tcp接收[EEG]数据并将其写入环形缓冲区.我认为将缓冲区作为ctypes或numpy数组非常方便,因为它可以为这样的缓冲区的任何位置创建一个numpy"视图",并且可以读取/写入/处理数据而无需任何复制操作.或者一般来说这是一个坏主意?

但是,我没有看到如何以这种方式实现固定大小的循环缓冲区.假设我创建了一个在内存中连续的缓冲区对象.达到缓冲区末尾时写入数据的最佳方法是什么?

一种可能的方法是在写指针到达缓冲区数组的末尾时开始覆盖(已经过时的)字节.然而,在边界附近,在这种情况下,某些块(用于处理)的numpy视图无法创建(或者可以吗?),因为其中一些仍然可以位于缓冲区数组的末尾,而另一个已经在它的开始.我读过它是不可能创建这样的圆形切片.怎么解决这个?

UPD:谢谢大家的答案.如果有人也面临同样的问题,是我得到的最终代码.

python ctypes numpy circular-buffer

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

在HTML文件中使用tern_for_vim插件

我正在尝试设置tern_for_vim插件,以便在JavaScript中具有良好的自动完成功能.在编辑".js"文件时,"Ctrl + X Ctrl + O"会提供很好的语义结果,然后选择"backbone.js"和其他库.但是,当我在HTML文件中编辑JS块时,这不起作用,我只看到基于缓冲区的标准完成.我无法弄清楚问题是什么.如何解决这个问题?

vim tern

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

为什么groupByKey操作总是有200个任务?

每当我groupByKey在RDD上进行操作时,即使原始表非常大,例如2k分区和数千万行,它也会分成200个作业.

此外,操作似乎停留在最后两个需要很长时间才能计算的任务上.

为什么是200?如何增加它,它会有帮助吗?

apache-spark

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

系统在内存已满之前交换

我的程序使用matplotlib绘制了大量的行(~200k),这对于内存非常贪婪.在绘图之前,我通常有大约1.5G的可用内存.当我显示数字时,系统会在仍有大约600-800M的可用RAM时开始大量交换.例如,当创建一个巨大的numpy数组时,不会观察到这种行为,它只是瞬间获取所有可用内存.很容易弄清楚这是matplotlib还是系统问题.

我正在使用64位Arch Linux.

UPD:交换等级设置为10.尝试将其设置为0,正如DoctororDrive建议的那样,但同样的事情.但是,在使用交换之前,其他程序似乎可以填充几乎所有内存.

python linux matplotlib archlinux

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

标签 统计

python ×3

apache-spark ×1

archlinux ×1

c++ ×1

circular-buffer ×1

ctypes ×1

cython ×1

linux ×1

matplotlib ×1

numpy ×1

oop ×1

tern ×1

vim ×1