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