在cython中更简洁的内存视图矩阵创建

时间:2018-03-01 09:16:42

标签: cython memoryview

我在做什么

我有很多小矩阵(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类向量/矩阵。

0 个答案:

没有答案