【发布时间】:2021-08-03 06:02:08
【问题描述】:
我正在研究一种利用 Cython 和 C++ 代码来加速计算的算法。部分计算涉及跟踪二维矩阵vecs,即 D x D' 维度(例如 1000 x 100)。该算法在 Cython 中并行化以设置每列的值。然后我有兴趣在 Python 中将 vecs 值作为 NumPy 数组获取。
在 Cython 中修改 vecs
设置vecs每一列的伪代码如下:
# this occurs in a Cython/C++ function
for icolumn in range(D'):
for irow in range(D):
vecs[irow, icolumn] = val
vecs 的数据结构
为了表示这样一个矩阵,我使用了npy_float32 类型的指针(我认为它只是numpy 的float 32 类型)。我现在有一个指向指针数组的指针,如下所示:
ctypedef np.npy_float32 DTYPE_t
cdef DTYPE_t** vecs # (D, D') array of vectors
目标是在 Python 级别获取 NumPy 数组中的向量
我有兴趣将这个 vecs 变量转换为 numpy 数组。这是我的尝试,但它不起作用。我是 C++ 和 Cython 的新手。
numpy_vec_arr = np.asarray(<DTYPE_t[:,:]> proj_vecs_arr)
【问题讨论】:
-
C++ 库究竟做了什么?转换为numpy?你有什么建议吗?
-
Cython 代码第一部分中的
vecs是什么?如果您使用诸如cdef float[:] vecs = np.zeros()之类的 MemoryViews,您可以稍后使用return vecs.base将其取回
标签: python c++ arrays numpy cython