将 c char numpy 数组快速转换为 python 字符串列表

Fast conversion of c char numpy array to list of python strings

我正在使用 Cython 在 Python 和 Fortran 代码之间建立接口。其中一部分是检索字符串数组。在 Fortran 中,

character(len=3) :: str_array(:)

为了这个例子,假设 str_array 包含以下内容

allocate(str_array(2))
str_array = ['abc','def']

我的方法是 return 将其作为单个 C 字符数组发送给 Cython。我最终得到了一个字节字符串的 numpy 数组:

c_str_arr = np.array([b'a', b'b', b'c', b'd', b'e', b'f'], dtype='|S1')

然后我使用以下 python 代码将此 numpy 数组转换为 python 字符串列表:

str_len = 3
arr_len = 2
c_str_arr.shape = (arr_len,str_len)
str_arr = []
for i in range(arr_len):
    str_arr.append(b''.join(c_str_arr[i]).decode())

但这很慢。

我的问题: 是否有更快的方法将 c_str_arr 转换为 python 字符串列表?

基本上,避免对数组进行迭代。这有点摸不着头脑,但试试看:

bs = c_str_arr.tobytes()
str_arr = [bs[i:i+str_len].decode() for i in range(0, str_len*arr_len, str_len)]