2016-05-24 28 views
6

shape ve len ile karşılaştırıldığında bir fark var mı (örneğin performansta)? Aşağıdaki örneği inceleyelim:Şekil vs numpy dizisi için kod

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 

Hızlı çalışma zamanı karşılaştırma hiçbir fark olduğunu göstermektedir:

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 

Yani, fark nedir ve hangisinin daha pythonic mi? (shape kullanıyordum).

cevap

6

Burada performans hakkında endişe etmem - herhangi bir farklılık sadece çok marjinal olmalıdır.

Ben daha pythonic alternatif muhtemelen daha yakından ihtiyaçlarınızı maçları biri olduğunu söylerdim

: sadece boyunca boyutunu verir len oysa tüm eksenler boyunca boyutunu içerdiğinden len(a) daha fazla bilgi içerebilir

a.shape ilk eksen: Ben şahsen açıkça dizinin boyutunu ihtiyaç durumunda len(a) kullanarak lehine ettiğinden daha

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

aslında, sadece tek boyutlu diziler ile çalışmak edersek.

+6

Sadece tamlık için: 'a.shape [0] == len (a)'. –