出于我的应用程序的目的,我可以用两种方式声明一个字符串数组:
作为列表strArr1 = [""] * 5
或
作为一个numpy数组strArr2 = numpy.empty([5], dtype=str)
但是,当我尝试将字符连接到数组元素时,我看到以下区别。在第一种情况下,例如
strArr1[0] += 'a'
strArr1[0] += 'b'
按预期['ab', '', '', '', '']
给我。
然而,在第二种情况下,
strArr2[0] += 'a'
strArr2[0] += 'b'
给我结果['a', '', '', '', '']
。
为什么连接不能正常工作numpy数组的元素?另外,鉴于我有一个限制,我必须一次扩展我的数组的元素一个字符,任何人都可以建议一个有效和pythonic方法?
感谢。
答案 0 :(得分:0)
Numpy要求字符串数组具有固定的最大长度。您可以使用strArr2 = numpy.empty([5], dtype='S10')
,其中10
是每个项目可以容纳的字符串的最大值,更长的子字符串将被截断。
或strArr2 = numpy.empty([5], dtype=object)
将使您能够将任意python对象存储到数组中,包括string
。
为了提高扩展字符串字符的效率,您可以尝试使用Python列表作为数据类型,然后将append
每个新字符添加到列表中。完成所有字符后,使用join
将列表转换回字符串。
答案 1 :(得分:0)
使用numpy.empty
声明dtype='U10'
,虽然没有将我的添加标记为字节,即w / o b'abc'
,但失败了。
最后,为了提高效率,我将遵循Neo X的建议,这应该避免行为中的分布特定异常。
P.S。我正在使用Numpy 1.10.4 with Python 3.5.1
。