python - 如何反转 NumPy 数组中的字符串?

标签 python arrays numpy

我想反转 NumPy 数组的每个字符串元素中的字符顺序。例如,给定以下输入:

array(['2', '3', '5', '7', '11', '13', '17', '19', '23', '29', '31', '37',
       '41', '43', '47', '53', '59', '61', '67', '71', '73', '79', '83',
       '89', '97'], dtype='<U2')

我想获得以下输出(不使用 Python for 循环):

array(['2', '3', '5', '7', '11', '31', '71', '91', '32', '92', '13', '73',
       '14', '34', '74', '35', '95', '16', '76', '17', '37', '97', '38',
       '98', '79'], dtype='<U2')

我知道我可以使用 arr[::-1] 来反转 NumPy 数组中元素的顺序,但这不是这个问题的主题,并且 np .array([e[::-1] for e in arr]) 效率低下,并且违背了 NumPy 的观点。

该数组是使用基本转换函数的矢量化版本 np.vectorize(to_base_str) 创建的.

如何使用矢量化反转 NumPy 数组的每个字符串元素中的字符顺序?我在网上搜索过但没有找到解决方案。请注意,arr[...,::-1] 不适用于 NumPy 数组中的字符串元素。

(代码是我的,但我确实使用了“AI 建议编辑”功能)

最佳答案

np.array([e[::-1] for e in arr]) 是执行此操作的直接方法,而且 numpy 也不错。或者使用 [e[::-1] for e in arr.tolist()] 完全绕过 numpy。您还可以使用 np.vectorize 或 np.frompyfunc 执行类似的操作。这些可能会更好一些。

numpy 中的

'vectorize' 表示使用编译方法(和运算符)在编译代码中进行必要的迭代。这些几乎都是数字运算。对于字符串,numpy 使用 Python 字符串方法。它没有自己编译的字符串操作。甚至 np.char 函数也使用 python 字符串方法。

因此,没有与 astr[::-1] 等效的 numpy

一些比较时间

In [16]: timeit np.array([s[::-1] for s in arr])
36.1 µs ± 151 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

In [17]: timeit np.array([s[::-1] for s in arr.tolist()])
21.1 µs ± 76.5 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

In [18]: timeit [s[::-1] for s in arr.tolist()]
8.29 µs ± 23.2 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

In [20]: timeit np.vectorize(lambda s: s[::-1])(arr)
65.9 µs ± 165 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

In [21]: timeit np.frompyfunc(lambda s: s[::-1],1,1)(arr)
20.3 µs ± 76.5 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

关于python - 如何反转 NumPy 数组中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76496565/

相关文章:

javascript - 是否可以在javascript中创建一个固定长度的数组?

python - 如何使用多维 numpy 数组作为输入使用 Seaborn 绘制箱线图或 fiddle 图?

python - 如何从索引矩阵中提取列?

python - 如何使用 requests、Python 和 Firebase 添加数据而不是替换数据

Python CSV 作为字典读入,第 n 行作为标题

python - 带有int参数的Django HttpResponseRedirect

python - Probema 使用 tkinter 从 sqlite 中删除

java - 用行填充矩阵

arrays - 结构体参数 - 数组

python - numpy 数组的最快保存和加载选项