2016-05-24 60 views
6

比較shapelen時是否有區別(例如性能)?請看下面的例子:shape vs len for numpy array

In [1]: import numpy as np 

In [2]: a = np.array([1,2,3,4]) 

In [3]: a.shape 
Out[3]: (4,) 

In [4]: len(a) 
Out[4]: 4 

快速運行比較表明,有沒有區別:

In [17]: a = np.random.randint(0,10000, size=1000000) 

In [18]: %time a.shape 
CPU times: user 6 µs, sys: 2 µs, total: 8 µs 
Wall time: 13.1 µs 
Out[18]: (1000000,) 

In [19]: %time len(a) 
CPU times: user 5 µs, sys: 1 µs, total: 6 µs 
Wall time: 9.06 µs 
Out[19]: 1000000 

那麼,有什麼區別,哪個是更Python? (我想用shape)。

回答

6

我不擔心這裏的表現 - 任何差異都應該是非常小的。

我想說的更Python的替代可能是一個更接近地滿足你的需要:

a.shape可能含有比len(a)更多信息,因爲它包含沿而len僅沿返回該尺寸的所有軸的尺寸第一軸:

>>> a = np.array([[1,2,3,4], [1,2,3,4]]) 
>>> len(a) 
2 
>>> a.shape 
(2L, 4L) 

如果實際發生,只有一維數組的工作,不是我個人贊成使用len(a)的情況下,你需要明確的數組的大小。

+6

爲了完整:'a.shape [0] == len(a)'。 –