gpt4 book ai didi

python - 替换 Numpy 字符串列表中的单个字符

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:59 25 4
gpt4 key购买 nike

我有一个 Datetime64 对象的 Numpy 数组,我需要将其转换为特定的时间格式 yyyy-mm-dd,HH:MM:SS.SSSNumpy 有一个名为 datetime_as_string 的函数,它输出 ISO8601 (yyyy-mm-ddTHH:MM:SS.SSS) 时间,这非常接近我想要的时间,唯一的区别是我的位置有一个 T想要一个逗号。

有没有办法快速将“T”换成“,”?这是一个示例数据集:

offset = np.arange(0, 1000)
epoch = np.datetime64('1970-01-01T00:00:00.000')
time_objects = epoch + offset.astype('timedelta64[ms]')
time_strings = np.datetime_as_string(time_objects)

我在使用 lambda 和列表理解方面取得了成功,但在 Python 列表和 Numpy 数组之间来回切换似乎很尴尬。

f = lambda x: x[:10] + ',' + x[11:]
np.array([f(x) for x in time_strings])

我知道在某些情况下 lambda 可以“直接”应用于 Numpy 数组,但在这种情况下不起作用。 f(time_strings) 产生类型错误。有什么想法吗?

我知道我可以转换回 Python 日期时间(这是我的方向)或使用 Pandas。但是 datetime_as_string 函数非常快,我想坚持使用 Numpy 解决方案。

--- 基于答案的结论---
事实证明,Paul 的 View 施放黑魔法比我的列表理解快 75 倍,比 np.char.replace() 快 100 倍。以下是三种方法的结果(均使用上述数据集初始化,但包含 1000000 个元素)。

start = time.time()
time_strings[..., None].view('U1')[..., 10] = ','
print(time.time() - start)
0.016000747680664062 seconds

start = time.time()
f = lambda x: x[:10] + ',' + x[11:]
time_strings = np.array([f(x) for x in time_strings])
print(time.time() - start, 'seconds')
1.1740672588348389 seconds

start = time.time()
time_strings = np.char.replace(time_strings,'T',',')
print(time.time() - start, 'seconds')
1.4980854988098145 seconds

最佳答案

您可以使用视播来访问单个角色:

time_strings[...,None].view('U1')[...,10] = ','

就地更改 time_strings

关于python - 替换 Numpy 字符串列表中的单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com