小编pyt*_*eak的帖子

在重塑时使用python ravel与transpose

我有一个二维数组v,v.shape=(M_1,M_2),我要重塑成一个三维阵列v.shape=(M_2,N_1,N_2),和M_1=N_1*N_2.

我想出了以下几行产生相同的结果:

np.reshape(v.T, reshape_tuple)
Run Code Online (Sandbox Code Playgroud)

np.reshape(v.ravel(order='F'), reshape_tuple)
Run Code Online (Sandbox Code Playgroud)

reshape_tuple=(M_2,N_1,N_2).

如果原始v是一个巨大的(可能是复数值的)矩阵,哪一个在计算上更好,在什么意义上(comp时间,内存等)?

我的猜测是使用转置更好,但如果reshape是自动ravel然后ravel-option reshape可能更快(虽然可能ravel在C或Fortran中做,然后它不清楚)?

python numpy reshape

5
推荐指数
1
解决办法
867
查看次数

cython openmp 单,屏障

我正在尝试在 cython 中使用 openmp 。我需要在 cython 中做两件事:

#pragma omp single{}i)在我的 cython 代码中使用范围。

ii) 使用#pragma omp barrier{}

有谁知道如何在 cython 中做到这一点?

以下是更多详细信息。我有一个 nogil cdef 函数my_fun(),我在 omp for 循环中调用它:

from cython.parallel cimport prange
cimport openmp

cdef int i

with nogil:
    for i in prange(10,schedule='static', num_threads=10):
        my_func(i)
Run Code Online (Sandbox Code Playgroud)

在内部my_func,我需要放置一个屏障来等待所有线程赶上,然后仅在其中一个线程中执行一项耗时的操作并获取 gil,然后释放屏障,以便所有线程同时恢复。

cdef int my_func(...) nogil:

    ...

    # put a barrier until all threads catch up, e.g. #pragma omp barrier

    with gil:
        # execute time consuming operation in one thread only, …
Run Code Online (Sandbox Code Playgroud)

openmp cython

3
推荐指数
1
解决办法
917
查看次数

标签 统计

cython ×1

numpy ×1

openmp ×1

python ×1

reshape ×1