Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换NumPy数组中部分字符串的最短方法_Python_Arrays_Numpy - Fatal编程技术网

Python 替换NumPy数组中部分字符串的最短方法

Python 替换NumPy数组中部分字符串的最短方法,python,arrays,numpy,Python,Arrays,Numpy,我有一个NumPy字符串数组 ['HD\,315', 'HD\,318' ...] 我需要将每个“HD\”替换为“HD”,也就是说,我想得到如下所示的新阵列 ['HD 315', 'HD 318' ...] 用Python解决此任务的最短方法是什么?不使用FOR循环是否可以执行此操作?使用python列表理解: L = ['HD\,315', 'HD\,318' ] print [s.replace('HD\,' , 'HD ') for s in L] 但它使用表示 或者,您可以使用m

我有一个NumPy字符串数组

['HD\,315', 'HD\,318' ...]
我需要将每个“HD\”替换为“HD”,也就是说,我想得到如下所示的新阵列

 ['HD 315', 'HD 318' ...]

用Python解决此任务的最短方法是什么?不使用FOR循环是否可以执行此操作?

使用python列表理解:

L = ['HD\,315', 'HD\,318' ]
print [s.replace('HD\,' , 'HD ') for s in L]
但它使用
表示

或者,您可以使用map():


对于python3,使用
列表(map(lambda s:s.replace('HD\,','HD'),L))
如果字符串长度固定,数组类型为string,而不是object类型,则可以使用这些行。请注意,它绕过了python的循环,例如在列表理解中遇到的循环,并且相应地要快得多:

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[view==92]=32)。即使字符串的长度不完全相等,但至少长度较短且有界,如果字符串较多,则将其放入固定长度数组可能会大大加快速度,但代价是增加一些额外内存。请注意,numpy.char包含许多用于矢量化字符串操作的实用函数。说到这里

np.char.replace(data, ',', ' ')

您可以使用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')

[s.replce('HD\,'HD')表示L中的s]
所以列表理解不能在您的选择中吗?是单字符串吗?或者应该有一个
作为
'HD\'315','HD\'318'
谢谢!我已经加了“,”谢谢@GrijeshChauhan!这就是我所需要的(打印错误“replce”),现在您所需要的就是
np.char.replace
。如果我有一个值列表要替换,例如[HD\”、“HA\”、“AB],那么使用您所述的列表进行迭代的最有效方法是什么?
import numpy.core.defchararray as np_f

data = ['HD\,315', 'HD\,318']

new_data = np_f.replace(data, 'HD\,', 'HD')