gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:54:01 27 4
gpt4 key购买 nike

我想反转 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com