Разделение numpy chararray и добавление символов - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть следующие данные, которые в настоящее время являются 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')

Я хотел бы просто разделить переменную radec после 9-й цифры, а затем добавить двоеточия, чтобы в качестве выходных данных использовались две переменные, например ::100100

  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 голосов
/ 04 апреля 2019

Я хотел бы просто разделить переменную radec после 9-й цифры…
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']

… и затем добавлениемдвоеточия

Это также можно сделать (ab), используя метод view:

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"))]
0 голосов
/ 02 апреля 2019

В недавнем SO я сравнил различные способы воздействия на строки массива:

Создать массив с буквой, повторяемой определенное количество раз, заданное другим массивом

Оказалось, что np.char (или chararray методы) не быстрее, чем понимание списка. np.frompyfunc был самым быстрым.

Итак, основываясь на опыте, я думаю, вам нужно сосредоточиться на изменении только одной строки и оставить любое ускорение numpy на потом.

Одна сложность, как уже отмечалось, заключается в том, что когда вы применяете split, вы получаете массив списков; два слова заменяют оригинал.

Не вдаваясь в подробности, я подозреваю, что для добавления ':' потребуется re, или какая-то итерация (понимание списка в строке?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...