【发布时间】:2019-01-29 15:31:04
【问题描述】:
我有一个很长的 unicode 字符串:
alphabet = range(0x0FFF)
mystr = ''.join(chr(random.choice(alphabet)) for _ in range(100))
mystr = re.sub('\W', '', mystr)
我想将其视为一系列代码点,所以目前,我正在执行以下操作:
arr = np.array(list(mystr), dtype='U1')
我希望能够将字符串作为数字进行操作,并最终获得一些不同的代码点。现在我想反转转换:
mystr = ''.join(arr.tolist())
这些转换相当快且可逆,但会占用list 中介不必要的空间。
有没有办法在不先转换为列表的情况下将 numpy 的 unicode 字符数组与 Python 字符串相互转换?
事后思考
我可以让arr 显示为单个字符串,类似
buf = arr.view(dtype='U' + str(arr.size))
这会产生一个包含整个原始元素的 1 元素数组。反过来也是可能的:
buf.view(dtype='U1')
唯一的问题是结果的类型是np.str_,而不是str。
【问题讨论】:
-
mystr = ''.join(arr.tolist())运行吗?arr不需要是字符串数组或类似的东西吗? -
怎么样:
np.frombuffer(mystr,dtype=np.uint8)? -
@DanielMesejo。抱歉,我删除了
.view(np.uint32)部分,因为它无关紧要。 -
@Divakar。我以为我已经尝试过了,但让我仔细检查一下
-
''.join(arr)有问题吗?
标签: python arrays string numpy