【问题标题】:Splitting a numpy chararray and adding characters拆分一个 numpy chararray 并添加字符
【发布时间】:2019-04-02 15:07:04
【问题描述】:

我有以下数据,目前是一个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

有没有快速和pythonic的方式来做到这一点??!!

【问题讨论】:

  • 在单个字符串上演示所需的操作,
  • >>> radec[0] 000000.45+174625.4' 变为 ra[0] = 00:00:00.45 和 dec[0] = +17:46:25.4
  • @sin,我刚刚标记了你的评论。
  • 如果我有:x = radec.split(),这会将变量放入列表中。但是如何使用 .split 并指定在 9 个字符后拆分?

标签: python regex string list numpy


【解决方案1】:

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

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

原来np.char(或chararray 方法)并不比列表理解快。 np.frompyfunc 最快。

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

如前所述,一个复杂的问题是,当您应用拆分时,您会得到一个列表数组;两个词替换原来的词。

没有深入细节,我怀疑添加“:”将需要re,或某种迭代(对字符串的列表理解?)。

【讨论】:

    【解决方案2】:

    我想在第 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']
    

    ...然后添加冒号

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

    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"))]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多