- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道我可以做类似的事情
numpy.loadtxt('data.txt', dtype={'names': ('time', 'magnitude'),
'formats': ('S12', 'f8')})
但这给了我时间作为一个字符串。我怎样才能把它操纵成一个 float ?
最佳答案
您可以使用 converter
parameter将函数应用于第一列中的每个字符串。为每一行调用一次 Python 函数可能会大大降低 np.loadtxt
的速度,但这对于中等大小的文件来说仍然是一个可行的解决方案:
import numpy as np
def parse_date(datestr):
return sum([multiplier*val for multiplier, val in
zip((3600, 60, 1), map(float, datestr.split(':')))])
x = np.loadtxt('data', dtype={'names': ('time', 'magnitude'), 'formats': ('f8', 'f8')},
converters={0:parse_date})
print(x)
或者,您可以在使用 loadtxt 后将字符串解析为 float ,如下所示:
x = np.loadtxt('data', dtype={'names': ('time', 'magnitude'), 'formats': ('S12', 'f8')})
arr = np.char.split(x['time'], ':')
# http://stackoverflow.com/a/19459439/190597 (Jaime)
newarr = np.fromiter((tuple(row) for row in arr), dtype=[('', np.float)]*3,
count=len(arr)).view('float').reshape(-1, 3)
times = (newarr * [3600,60,1]).sum(axis=1)
y = np.empty_like(x, dtype={'names': ('time', 'magnitude'), 'formats': ('f8', 'f8')})
y['time'] = times
y['magnitude'] = x['magnitude']
print(y)
编辑:我创建了一个 10**6 行的测试文件来测试哪种方法更快。第二种方法快一点:
In [329]: %timeit using_fromiter()
1 loops, best of 3: 5.59 s per loop
In [328]: %timeit using_converter()
1 loops, best of 3: 6.88 s per loop
import os
import numpy as np
def create_data(N):
data = np.random.random(size=N)*86400
hours, remainder = data.__divmod__(3600)
minutes, seconds = remainder.__divmod__(60)
mag = np.arange(N)
filename = os.path.expanduser('~/tmp/data')
with open(filename, 'w') as f:
for h,m,s,a in np.column_stack([hours, minutes, seconds, mag]):
f.write('{h:d}:{m:d}:{s:.6f} {a}\n'.format(h=int(h), m=int(m), s=s, a=a))
def parse_date(datestr):
return sum([multiplier*val for multiplier, val in
zip((3600, 60, 1), map(float, datestr.split(':')))])
def using_converter():
x = np.loadtxt('data', dtype={'names': ('time', 'magnitude'),
'formats': ('f8', 'f8')},
converters={0:parse_date})
return x
def using_fromiter():
x = np.loadtxt('data', dtype={'names': ('time', 'magnitude'), 'formats': ('S12', 'f8')})
arr = np.char.split(x['time'], ':')
newarr = np.fromiter((tuple(row) for row in arr), dtype=[('', np.float)]*3,
count=len(arr)).view('float').reshape(-1, 3)
times = (newarr * [3600,60,1]).sum(axis=1)
y = np.empty_like(x, dtype={'names': ('time', 'magnitude'), 'formats': ('f8', 'f8')})
y['time'] = times
y['magnitude'] = x['magnitude']
return y
create_data(10**6)
关于python - 使用 numpy.loadtxt 解析包含 HH :MM:SS. mmm 次的数据矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23482308/
如标题所示,我有一个问题。我需要将 LocalDataTime yyyy-MM-ssThh-mm-ss 解析为 LocalDataTime yyyy-MM-ss hh-mm-ss 但是当我这样做时 S
我使用“cin”从输入流中读取单词,比如 int main( ){ string word; while (cin >> word){ //do sth on t
我有一个 Java 函数可以将秒数转换为特定格式 (hh:mm:ss): public static String formatChronometer(long seconds) { retu
(学习C++)我一直在看下面的代码部分: stringstream ss; // more code ss.clear(); ss.str(""); 为什么 ss.str(""); 调用时 ss.cl
我有一个从 GPS 跟踪器收集的数据集。数据中的总时间应为 mm:ss。但 Excel 将其解释为小时和分钟。 如何使用公式将其转换为分钟和秒?在下面的示例中,32 应该是 32 分钟,15 应该是
我的时间格式如下 public static final String TIME_FORMAT = "HH:mm:ss.SS"; edition.getEditionDate().format(T
我正在尝试对以下示例进行转换: 原始时间:1:03.091 转换时间:63.09 我做了一些研究,发现我可以将分钟添加到秒,但不知道如何添加毫秒。以下是我迄今为止所做的事情: a = "01:40.4
我有一个包含秒数的 float8,即 65.455。我试图在 View 中设置列的格式,使其显示为 1:05.455。 像这样使用 postgres 命令:TO_CHAR((user_data.tot
我有 vba 问题,我一直试图找到答案很长时间。我有来自众多客户的大量电子表格,我在这些电子表格上运行宏,我是编码新手,并且能够大致弄清楚我需要做什么。我的客户每月向我们发送数据,并且每个月的行数都在
我正在尝试编写一个正则表达式,允许输入以分钟、秒、十分之一和百分之一为单位的时间。我遇到的问题是,还应该允许用户输入仅秒和十分之一或秒、十分之一和百分之一的时间。变化如下: 分:秒:日分:秒:日毫米:
我想知道输入“+1”是什么意思 scanf("%s", ss+1) 其中 ss 是字符串输入。 我正在解决 codechef 上的一个问题,当我尝试阅读其他一些解决方案以了解其他可能的解决方案/方法时
我想验证 jquery 函数接收的某个字符串。 这是我到目前为止所做的 var duration=$('#duration').val(); if(//string validation?) {
Porter Stemmer algorithm 的意义何在?是否有将 SS 转换为 SS 的规则? 最佳答案 假设规则 SS->SS 不在算法中。然后像 caress 这样的词根本不会被识别,而且算
有谁知道,是否可以在 mpv.conf 中设置包括毫秒在内的默认显示时间格式? 现在我需要点击时间切换到毫秒,因为手册中的选项 ,,timems'' https://mpv.io/manual/mas
我有一个按以下方式计算的变量 currTime: long currTime = System.currentTimeMillis() - start; //where start is the st
我正在尝试编写将秒数转换为以下格式的逻辑: HH:MM:SS:MS,其中 MS 为毫秒 HH:MM:SS;F,其中 F 是帧 (不仅仅是 HH:MM:SS,因此这个问题与 Stackoverflow
我正在使用以下代码以“dd/MM/yyyy HH:mm:ss.SS”格式获取日期。 import java.text.SimpleDateFormat; import java.uti
我有一天中每一分钟的数据点: import numpy as np data = np.random.random(1440,) # I can represent minutes as intege
这是查询的工作版本。我只需要用 AS 保存新值。谢谢 Andy。 $Wednesday = mysqli_query($conn, "SELECT *,TIME_FORMAT(class_start,
我有下表没有时区的时间戳(6) 2000/01/01 0:00:00 2000/01/01 10:00:00 2000/01/01 04:00:00 我想得到hh:mm:ss我想要的结果如下 0:00
我是一名优秀的程序员,十分优秀!