我有一个numpy的整数数组,看起来像是X000Y000。 X和Y的长度可以为1、2或3,并且可以包含0。我想将数组中的每个元素都转换为X。我觉得可以使用一个正则表达式来解决这个问题,但无法找出要使用的正则表达式,也不知道如何将其应用于整个数组。
例如:14000010000应该变成140。
答案 0 :(得分:1)
我假设X
和Y
不能以0
开头。 [1-9]\d{0,2}
匹配一个以0
开头的1到3位数字。
因此提取X
和Y
的正则表达式应为:
^([1-9]\d{0,2})000([1-9]\d{0,2})000$
然后,您可以使用re.sub()
删除X
和Y
之间的零。
regex = re.compile(r'^([1-9]\d{0,2})000([1-9]\d{0,2})000$');
i = 14000010000
istr = str(i)
new_i = int(regex.sub(r'\1\2', istr)
您可以将此映射到您的numpy数组上
regex = re.compile(r'^([1-9]\d{0,2})000([1-9]\d{0,2})000$');
new_array = np.fromiter((int(regex.sub(r'\1\2', str(x)) for x in array), array.dtype)
有关在numpy数组上映射函数的各种方式,请参见Most efficient way to map function over numpy array。