我有一个NumPy字符串数组
['HD\,315', 'HD\,318' ...]
我需要将每个'HD \''替换为'HD',即我想获得如下所示的新数组
['HD 315', 'HD 318' ...]
在Python中解决此任务的最简单方法是什么?没有FOR循环可以做到这一点吗?
答案 0 :(得分:7)
使用python list comprehension:
L = ['HD\,315', 'HD\,318' ]
print [s.replace('HD\,' , 'HD ') for s in L]
但它使用for
或者你可以使用map():
print map(lambda s: s.replace('HD\,' , 'HD '), L)
for python3使用list(map(lambda s: s.replace('HD\,' , 'HD '), L))
答案 1 :(得分:6)
您可以使用numpy.core.defchararray.replace函数,该函数使用numpy执行for操作:
import numpy.core.defchararray as np_f
data = ['HD\,315', 'HD\,318']
new_data = np_f.replace(data, 'HD\,', 'HD')
答案 2 :(得分:3)
如果您的字符串具有固定长度,并且您的数组是string类型而不是object类型,那么这些行中的某些内容将起作用。请注意,它绕过了python for循环,例如在列表推导中遇到的,并且相应地更快:
import numpy as np
data = np.array(['HD\,315', 'HD\,318'])
view = data.view(np.uint8).reshape(data.shape + (data.dtype.itemsize,))
view[:,2] = 32
print data
当然,如果您的逗号可能出现在不同的地方,则需要逻辑索引(即,查看[view == 92] = 32)。即使你的字符串不是完全相等的长度,但至少是一个短的和有限的长度,将它们放在一个固定长度的数组中可能会以一些额外的内存为代价加速,如果你有很多这些字符串。请注意,numpy.char包含许多用于矢量化字符串操作的有用实用程序函数。说到哪......
np.char.replace(data, ',', ' ')