我有以下数据,当前为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
是否有快速而有效的方法呢?!
答案 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"))]