比较shape和len时是否存在差异(例如性能)?请考虑以下示例:
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
那么,有什么不同,哪一个更pythonic? (我想用形状).
解决方法
我不担心这里的表现 – 任何差异都应该是非常微小的.
我会说更多的pythonic替代品可能更符合您的需求:
a.shape可能包含比len(a)更多的信息,因为它包含所有轴的大小,而len只返回沿第一个轴的大小:
>>> a = np.array([[1,4],[1,4]]) >>> len(a) 2 >>> a.shape (2L,4L)
如果你真的碰巧只使用一维数组,那么我个人赞成使用len(a),以防你明确需要数组的大小.