Python 不带循环的Numpy中的切片1D数组
我有一个数组Python 不带循环的Numpy中的切片1D数组,python,arrays,numpy,vectorization,slice,Python,Arrays,Numpy,Vectorization,Slice,我有一个数组x,如下所示: x=np.array(["83838374747412E61E4C202C004D004D004D020202C3CF", "8383835F6260127314A0127C078E07090705023846C59F", "83838384817E14231D700FAC09BC096808881E1C1BC68F", "8484835C535212600F860A1612B90FCF0FCF0
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中,字符串数组的任意切片要困难得多。关于的答案解释了为什么它不是字符串的最佳工具,但说明了可能的情况
或者,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
这里有一个蟒蛇式的方法 考虑你的一部分
x = "83838374747412E61E4C202C004D004D004D020202C3CF8383835F626012"
您可以将map
、join
、zip
和iter
组合起来使用
xArray = array(map(''.join, zip(*[iter(x)]*2)))
然后,您可以使用int的矢量化形式将十六进制值转换为整数
intHex = vectorize(int)
xIntForm = intHex(xArray,16)
不过,我不确定矢量化
函数的性能,它是numpy的一部分
干杯在
x
数组的行之间是否有逗号
遗漏?是的,谢谢。谢谢,这正是我在片段中寻找的谢谢!这与,;pandas系列上的intHex=vectorize(int)xIntForm=intHex(xArray,16)转换了它/感谢您的帮助,我使用了上面的pandas方法,然后使用vectorize进行转换。