gpt4 book ai didi

python - 在没有循环的情况下在 Numpy 中切片一维数组

转载 作者:行者123 更新时间:2023-11-28 19:20:25 27 4
gpt4 key购买 nike

我有一个数组x,如下所示:

x=np.array(["83838374747412E61E4C202C004D004D004D020202C3CF",
"8383835F6260127314A0127C078E07090705023846C59F",
"83838384817E14231D700FAC09BC096808881E1C1BC68F",
"8484835C535212600F860A1612B90FCF0FCF012A2AC6BF",
"848484787A7A1A961BAC1E731086005D005D025408C6CF",
"8484845050620C300D500A9313E613E613012A2A5CC4BF",
"838383757C7CF18F02192653070D03180318080101BE6F",
"8584845557570F090E830F4309E5080108012A2A2AC6DF",
"85858453536B07D608B3124C102A102A1026010101C61F",
"83838384848411A926791C162048204820484D4444C3BF"], dtype=object)

这些是串联的十六进制值,我需要对其进行切片以便转换为整数,然后应用转换因子。我想要一个数组,例如:

[83,83,83,84,84,84,83,85,85,83]

这相当于 x[:,0:2] 但我不能在这个 (10,) 数组中切片。我正在尝试做一些类似于字符数组在 MatLab 中所做的事情。我将对数百万行执行此操作,这就是我试图避免循环的原因。

最佳答案

如果您只是在每个十六进制值的前两个字符之后,一个选择是将您的数组重新转换为 '|S2'dtype:

>>> x.astype('|S2')
array(['83', '83', '83', '84', '84', '84', '83', '85', '85', '83'],
dtype='|S2')

这个想法可以概括为返回每个字符串的前 n 个字符。

字符串数组的任意切片在 NumPy 中要困难得多。关于 this Stack Overflow page 的回答解释为什么它不是处理字符串的最佳工具,但展示什么是可能的。

或者,Pandas 库有助于快速矢量化操作(构建在 NumPy 之上)。它有许多非常有用的字符串操作,这使得切片比普通的 NumPy 简单得多:

>>> import pandas as pd
>>> s = pd.Series(x)
>>> s.str.slice(2, 9)
0 8383747
1 83835F6
2 8383848
3 84835C5
4 8484787
5 8484505
6 8383757
7 8484555
8 8584535
9 8383848
dtype: object

关于python - 在没有循环的情况下在 Numpy 中切片一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471911/

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