【问题标题】:Vectorized string processing in a NumPy arrayNumPy 数组中的向量化字符串处理
【发布时间】:2012-07-26 10:18:52
【问题描述】:

如何优雅地处理 numpy 数组中的文本?

我总是可以遍历数组,但是否也有一些神奇的 oneliner 可能? 我只是在学习 python,并希望以一种看起来不错的方式来做。

我想要的示例:

for y in data['filename']:
first = 12
last  = y[1][12:].find('.')
y= y[1][first+1:last+12]

【问题讨论】:

  • NumPy 不适用于字符串处理。事实上,存储可变长度字符串的效率非常低。您可能希望在纯 Python 中执行此操作。
  • 实际上,甚至可以存储可变长度的字符串吗?
  • @François - 作为对象数组,是的。 (虽然,在这一点上,你最好列出一个清单。)
  • @tarrasch - 如果您想从文件名中去除扩展名,请查看os.path.splitext。 (同样,如果您正在处理文件名/路径,请查看所有 os.path。)正如 larsmans 所建议的,对于处理 numpy 数组中的字符串,只需将它们视为列表并迭代即可。 numpy 故意不提供向量化字符串操作。
  • @tarrasch 你检查了下面的答案吗?

标签: python arrays string numpy


【解决方案1】:

您可以使用numpy.char.array(),例如:

from string import find

import numpy as np

a = np.char.array(['cmd.py', 'matrix.txt', 'print.txt', 'test.txt', 'testpickle.test', 'Thumbs.db', 'tmp.py', 'tmp.txt', 'tmp2.py'])
find(a, '.py')
#array([ 3, -1, -1, -1, -1, -1,  3, -1,  4])


np.char.array(a.split('.'))[:,0]
#chararray(['cmd', 'matrix', 'print', 'test', 'testpickle', 'Thumbs', 'tmp', 'tmp', 'tmp2'], dtype='|S10')

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2017-12-05
    • 2011-05-15
    • 1970-01-01
    • 2017-11-13
    • 2018-07-27
    相关资源
    最近更新 更多