分割一个numpy字符数组并添加字符

时间:2019-04-02 15:07:04

标签: python regex string list numpy

我有以下数据,当前为numpy.chararray:

>>> radec
chararray(['000000.45+174625.4', '000000.66+145828.8',
       '000000.97+044947.2', ..., '235959.74+100700.4',
       '235959.78+285717.0', '235959.83+344315.0'], dtype='<U18')

我想在第9个数字后简单地拆分radec变量,然后添加冒号以将两个变量作为输出,例如:

  00:00:00.45 +17:46:25.4
  00:00:00.66 +14:58:28.8
  ...
  23:59:59.78 +28:57:17.0 
  23:59:59.83 +34:43:15.0

是否有快速而有效的方法呢?!

2 个答案:

答案 0 :(得分:0)

在最近的SO中,我比较了作用于数组字符串的各种方式:

Create an array with a letter repeated a given number of times given by another array

事实证明,np.char(或chararray方法)并没有比列表理解更快的速度。 np.frompyfunc最快。

因此,根据经验,我认为您只需要专注于修改一个字符串,而将任何numpy加速都留待以后进行。

如前所述,一个复杂之处是,当您应用split时,会得到一个列表数组;用两个单词代替原来的单词。

在不详细讨论的情况下,我怀疑添加':'将需要re或某种形式的迭代(对字符串的列表理解?)。

答案 1 :(得分:0)

  

我想简单地将第9位数字后面的radec变量分割开...
  radec [0] 000000.45 + 174625.4'变为ra [0] = 00:00:00.45和dec [0] = +17:46:25.4

可以通过使用适当的数据类型构造变量的内存视图来实现拆分:

t = numpy.dtype([('ra', 'U9'), ('dec', 'U9')])
ra  = radec.view(t)['ra']
dec = radec.view(t)['dec']
  

…然后添加冒号

这也可以(使用视图方法)完成:

ra  = [":".join(x) for x in ra .view(numpy.dtype("U2,U2,U5"))]
dec = [":".join(x) for x in dec.view(numpy.dtype("U3,U2,U4"))]