替换N维numpy数组中的字符串

3

我有一个由字符串组成的二维数组,我想用长度较长的其他字符串替换它们。

我尝试了以下代码:

for key, value in UniqueIds.items():
            indices[indices[...] == str(value)] = key

需要将每个值替换为对应的键,但每个值是4字节,而键大约有10个字符,改变后的值只显示前4个字母

2个回答

2
我认为你需要改变数组的dtype,例如在这里这里。一个四个字符的字符串将是dtype='<U4'。如果你有一个八个字符的字符串,它将是dtype='<U8'等等。
所以,如果你知道你的结果字符串的大小,你可以显式地指定它(例如:dtype='<U10'来存储10个Unicode字符)。如果你不关心内存和复制操作,可以使用object作为dtype来使其动态化。
import numpy as np
s = np.array(['test'], dtype=object)
s[0] = 'testtesttesttest'
# s
# array(['testtesttesttest'], dtype=object)

现在.replace()将会生效:

最初的回答

s[0] = s[0].replace('test', 'notatest')
# s
# array(['notatestnotatestnotatestnotatest'], dtype=object)

1
从技术上讲,'U10'表示10个Unicode字符,或者说40个字节,因为numpy是这样实现的(itemsize)。 - hpaulj
@hpaulj 感谢您的澄清!我已经进行了编辑以反映这一点。 - FObersteiner

0
问题在于我将初始的整数数组转换为了字符串数组,就像这样:
indices = np.char.mod('%d', indices)

当我使用以下这行代码替换上一行时:

indices = indices.astype(str)

一切都按预期运行。


好的,;-)不过,请检查“indices”的数据类型 - 转换为字符串之前,它的结果将取决于您的原始数据类型。例如,如果它是“int32”,则“dtype”将变成类似于“<U11”的东西 - 所以您仍然受到一定限制。 - FObersteiner
好的,谢谢,希望它无论如何都能有所帮助。 - FObersteiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接