【发布时间】:2022-01-01 09:04:50
【问题描述】:
我有三个包含整数的长度相同的数组:years、months 和 days。我想创建一个长度相同的 (NumPy) 数组,其中包含格式为 '(-)yyyy-mm-dd' 的字符串,格式为 '%i-%2.2i-%2.2i'。
对于标量情况,我会做类似的事情
year=2000; month=1; day=1
datestr = '%i-%2.2i-%2.2i' % (year, month, day)
这将产生'2000-01-01'。
我怎样才能创建这个的矢量版本,例如:
import numpy as np
years = np.array([-1000, 0, 1000, 2000])
months = np.array([1, 2, 3, 5])
days = np.array([1, 11, 21, 31])
datestr_array = numpy.somefunction(years, months, days, format='%i-%2.2i-%2.2i', ???)
请注意,我感兴趣的日期范围介于 -2000 年和 +3000 (CE) 年之间,因此 Python 的 datetime 和 Pandas 的 DateTimeIndex 都没有提供解决方案。
【问题讨论】:
-
datastr_array = ['%i-%2.2i-%2.2i'.format(years[j], months[j], days[j]) for j in range(len(years))]- 虽然这看起来很复杂,但实际上只是格式化,但需要多次。 -
你说得对,我认为这可能是一种可能的方式,但看起来总是返回数组的字符串副本。
-
快速编译的代码主要适用于数字,而不是字符串
-
Dw @AstroFloyd - 看看下面的代码 - 它修复了一切
-
这样的功能已经是not yet implemented for the datetime type,所以显然不适用于多个数组(Numpy 中还没有通用格式化功能)。我想知道是否有一些技巧可以在没有循环的情况下手动获得类似的结果,但是 Numpy 中的字符串处理非常有限,所以我认为最好的方法可能是使用循环或 C/Cython 模块(生成一个 Numpy 数组,因为使用纯 Python 字符串不会更快)。
标签: python arrays string numpy formatting