首页 > 解决方案 > Cython - 具有 numpy 属性的类

问题描述

我正在尝试通过使用cython扩展类型来优化 python 类。我的操作完全numpy不使用索引,即分段加法、矩阵乘法,所以我的主要目标是减少 python 开销。我最感兴趣的是类型声明:我应该使用numpy还是cython结构?这是一个简单的例子:


cdef class Analyzer:
    cdef float coeff
    cdef float[:] v1, v2 #should I use memoryview? can I use a ndarray?

    def __init__(self):
        # some stuff ...

    cpdef void func(self, matrix, vector):
        # some stuff ...
        cdef Py_ssize_t i
        for i in range(big_number):
            self.update_vectors(i)
            self.v1 = matrix @ vector + self.coeff * self.v2 # all my operations are like this i.e. no indeces 
            # should I convert views to nd.arrays?

请注意,当我尝试时self.coeff * self.v2,我会收到错误,因为它们不被视为 numpy 数组:

Invalid operand types for '*' (float; float[:] *)

因此,由于我正在使用numpy并且没有必要仅为标准线性代数创建循环,我该如何声明(类)属性类型以减少开销?

标签: pythonnumpyclasscython

解决方案


推荐阅读