假设我有一个数组my_array和一个奇异值my_val。(请注意,my_array它始终是排序的)。
my_array = np.array([1, 2, 3, 4, 5])
my_val = 1.5
Run Code Online (Sandbox Code Playgroud)
因为my_val是 1.5,我想把它放在 1 和 2 之间,给我数组[1, 1.5, 2, 3, 4, 5]。
我的问题是:my_array随着任意大的增长,生成有序输出数组的最快方法是什么(即以微秒为单位)?
我想到的原始方法是将值连接到原始数组然后排序:
arr_out = np.sort(np.concatenate((my_array, np.array([my_val]))))
[ 1. 1.5 2. 3. 4. 5. ]
Run Code Online (Sandbox Code Playgroud)
我知道这np.concatenate很快,但我不确定如何np.sort随着my_array增长而扩展,即使它my_array总是会被排序。
编辑:
我已经为接受答案时列出的各种方法编制了时间:
输入:
import timeit
timeit_setup = 'import numpy as np\n' \
'my_array = np.array([i for i in range(1000)], dtype=np.float64)\n' \
'my_val = …Run Code Online (Sandbox Code Playgroud) 我有一个 ascii 文件,其中的日期格式如下:
Jan 20 2015 00:00:00.000
Jan 20 2015 00:10:00.000
Jan 20 2015 00:20:00.000
Jan 20 2015 00:30:00.000
Jan 20 2015 00:40:00.000
Run Code Online (Sandbox Code Playgroud)
将文件加载到 Pandas 时,上面的每一列在 Pandas 数据框中都有自己的列。我尝试了以下变体:
from pandas import read_csv
from datetime import datetime
df = read_csv('file.txt', header=None, delim_whitespace=True,
parse_dates={'datetime': [0, 1, 2, 3]},
date_parser=lambda x: datetime.strptime(x, '%b %d %Y %H %M %S'))
Run Code Online (Sandbox Code Playgroud)
我收到几个错误:
TypeError: <lambda>() takes 1 positional argument but 4 were given
ValueError: time data 'Jun 29 2017 00:35:00.000' does not match format '%b %d %Y …Run Code Online (Sandbox Code Playgroud)