我在做什么

我有很多小矩阵(3x3,5x5,3x4等),其大小在编译时是已知的 . 直到现在我用numpy来创造这些

A = np.zeros((3,5))

并使用numpy数组,就好像它是一个内存视图 . 现在,我想摆脱这些numpy调用,而是使用C数组(或类似的快速动态分配的东西) . 我做了以下事情:

cdef double[3][5] A_c
cdef double[:,:] A = A_c
A[:] = 0.0

当然,最后一行取决于将元素设置为零的重要性 . 对于动态大小的数组,我这样做:

double[:,:] A = view.array(shape=(4, N), itemsize=sizeof(double), format="d")

而且我很满意 .

我想做什么

我想用更简洁的方法来做到这一点 . 我知道我可以实现这里描述的类简洁:

Cython: Create memoryview without NumPy array?

但这不是一个在编译时具有已知大小的c数组 . 也许有一种方法可以将DEF宏与参数一起使用?像这样:

** NOT WORKING, DO NOT COPY AND PASTE **
DEF small_matrix(name,size):
    cdef double[size[0],size[1]] name_c
    cdef double[:,:] name = name_c

...
small_matrix(A,(3,5))
small_matrix(B,(5,1))
...
small_matrix(C,(3,1))
for i in range(3):
  C[i,0] = 0.0
  for j in range(5):
    C[i,0] += A[i,j]*B[j,0]

也许我也错过了一种简单的方法来创建一个带有非动态分配数据的cdef类向量/矩阵 .