numpy结构化数组性能

时间:2018-06-21 22:21:54

标签: performance numpy structured-array

我有一个查找问题,可以归结为以下情况。 三列带正整数。对于某些值(i),column_3中的哪些值在i之下的column_1中有一个值,在i之上的column_2中具有哪些值?

var router = new VueRouter({
const routes = [
...
]
});

这是我要优化的操作:

import numpy as np

rows = 1e6
i = 5e8

ts = np.zeros((rows,), dtype=[('column_1','int64'),('column_2','int64'),('column_3','int64')])
ts['column_1'] = np.random.randint(low=0,high=1e9,size=rows)
ts['column_2'] = np.random.randint(low=0,high=1e9,size=rows)
ts['column_3'] = np.random.randint(low=0,high=1e9,size=rows)    

我有什么可以忽略的事情吗? 感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

在创建时还将3个数组分配给A,B,C

In [3]: %%timeit
   ...: a = ts[(ts['column_1'] < i)&(ts['column_2'] > i)]['column_3']
   ...: 
22.5 ms ± 838 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [4]: %%timeit
   ...: a = C[(A < i)&(B > i)]
   ...: 
   ...: 
9.36 ms ± 15 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

使用a,b,c = ts['column_1'],ts['column_2'],ts['column_3']介于两者之间。

这些是您可以使用的变体和时机。正如我所看到的,由于索引差异而导致的差异很小。就像数量级差一样。