我想颠倒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')

我希望获得以下输出(101):

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.vectorizenp.frompyfunc执行类似的操作.这些公司的规模可能会更大一些.

numpy中的"向量化"意味着使用编译的方法(和运算符)在编译的代码中进行必要的迭代.这些几乎都是数字运算.对于字符串,numpy使用Python字符串方法.它没有自己的已编译字符串操作.即使是这np.char个函数也使用了python字符串方法.

所以numpy不等于astr[::-1].

一些比较时间

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相关问答推荐

想要使用Polars groupby_Dynamic来缩减时间序列收件箱(包括空垃圾箱)

KNN分类器中的GridSearchCV

pyramid 内部数组中的连续序列-两极

使用Beautiful Soup获取第二个srcset属性

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

如果条件为真,则Groupby.mean()

即使在可见的情况下也不相互作用

如何在箱形图中添加绘制线的传奇?

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

pandas滚动和窗口中有效观察的最大数量

Python解析整数格式说明符的规则?

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

driver. find_element无法通过class_name找到元素'""

如何在图中标记平均点?

下三角形掩码与seaborn clustermap bug

如何防止Pandas将索引标为周期?

从列表中获取n个元素,其中list [i][0]== value''

递归函数修饰器

在极点中读取、扫描和接收有什么不同?

如何获得3D点的平移和旋转,给定的点已经旋转?