【问题标题】:Fast conversion of c char numpy array to list of python strings将 c char numpy 数组快速转换为 python 字符串列表
【发布时间】:2023-03-12 12:28:01
【问题描述】:

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

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

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

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

我的方法是将它作为单个 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 字符串列表?

【问题讨论】:

    标签: python numpy cython numpy-ndarray


    【解决方案1】:

    基本上,避免对数组进行迭代。这有点像在黑暗中拍摄,但请尝试:

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

    【讨论】:

    • 快得多!谢谢!我的方法是为一个测试用例花费 8 毫秒。你的方法需要 300 我们。
    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多