我有一个数组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中字符数组的操作。我将在数百万行中执行此操作,这就是我试图避免循环的原因。
答案 0 :(得分:0)
如果您只是在每个十六进制值的前两个字符之后,一个选项是将您的数组重新设置为dtype
'|S2'
:
>>> 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
答案 1 :(得分:0)
这是一种pythonic方式
考虑部分字符串
x = "83838374747412E61E4C202C004D004D004D020202C3CF8383835F626012"
您可以合并map
,join
,zip
和iter
以使其有效
xArray = array(map(''.join, zip(*[iter(x)]*2)))
然后,您可以使用向量化形式的int
处理将十六进制值转换为整数intHex = vectorize(int)
xIntForm = intHex(xArray,16)
我不确定vectorize
函数的性能,但这是numpy的一部分。
干杯