专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
Python爱好者社区  ·  确认裁员了,很严重,所有人做好准备吧! ·  昨天  
Python爱好者社区  ·  python必备手册 ·  2 天前  
Python开发者  ·  震撼!美国卡脖子下,中国工程师拖 4 ... ·  2 天前  
Python爱好者社区  ·  又见车企远程锁车?车主无奈,网友怒喷“谁敢买” ·  3 天前  
Python爱好者社区  ·  这才是最适合新手的python教程,640页超详细 ·  3 天前  
51好读  ›  专栏  ›  Python开发者

如何获得 NumPy 的最佳性能

Python开发者  · 公众号  · Python  · 2016-12-08 21:45

正文

请到「今天看啥」查看全文


id ( a ) == aid

True

c = a * 2 ; id ( c ) == aid

False


一定要选择真正需要的操作类型。隐式拷贝操作很明显很慢,如下所示:


% % timeit a = np . zeros ( 10000000 )

a *= 2

10 loops , best of 3 : 19.2 ms per loop

% % timeit a = np . zeros ( 10000000 )

b = a * 2

10 loops , best of 3 : 42.6 ms per loop


4. 重塑一个数组可能涉及到拷贝操作,也可能涉及不到。原因将在下面解释。例如,重塑一个二维矩阵不涉及拷贝操作,除非它被转置(或更一般的非连续操作):


a = np . zeros (( 10 , 10 )); aid = id ( a ); aid

53423728


重塑一个数组,同时保留其顺序,并不触发拷贝操作。


b = a . reshape (( 1 , - 1 )); id ( b ) == aid

True


转置一个数组会改变其顺序,所以这种重塑会触发拷贝操作。


c = a . T . reshape (( 1 , - 1 )); id ( c ) == aid

False


因此,后边的指令比前边的指令明显要慢。


5. 数组的flatten和revel方法将数组变为一个一维向量(铺平数组)。flatten方法总是返回一个拷贝后的副本,而revel方法只有当有必要时才返回一个拷贝后的副本(所以该方法要快得多,尤其是在大数组上进行操作时)。


d = a . flatten (); id ( d ) == aid

False

e = a . ravel (); id ( e ) == aid

True

% timeit a . flatten ()

1000000 loops , best of 3 : 881 ns per loop

% timeit a







请到「今天看啥」查看全文