什么是更快:Python3的'len'或numpys形状?

时间:2016-02-22 07:19:29

标签: python python-3.x opencv numpy

我有一个坐标数组:

points = [x,y]

(numpy)尺寸/形状:(18,1,2)

在matlab中,要初始化一个数组以使用'3'索引这些点,我可以这样做:

A = ones(size(points,1),1)*3'

我怎样才能以最快的方式使用python3和numpy?

2 个答案:

答案 0 :(得分:0)

正常的numpy等价物将是

np.ones((points.shape[0],1))*3

shape是数组的属性,因此访问它基本上是即时的。它不需要做任何计算。

In [277]: points.shape
Out[277]: (18, 1, 2)
In [278]: points.size   # number of elements
Out[278]: 36
In [279]: len(points)  # size of the 1st dimension
Out[279]: 18

在上面的np.ones...表达式中,shapelen()只是计算时间的一小部分。你使用哪个并不重要。但shape更为通用,例如。 np.ones(points.shape[:2])将提供相同的(18,1)数组。

答案 1 :(得分:0)

    def time_compare(self):
        loops = 100000000
        start = time.time()
        for i in range(loops):
            self.value_map.shape[0]
            self.value_map[0].shape[0]
            self.value_map[0][0].shape[0]
            self.value_map[0][0][0].shape[0]
        end = time.time()
        timed = (end - start)
        print("shape={}".format(timed))

        start = time.time()
        for i in range(loops):
            len(self.value_map)
            len(self.value_map[0])
            len(self.value_map[0][0])
            len(self.value_map[0][0][0])
        end = time.time()
        timed = (end - start)
        print("len={}".format(timed))
  

shape = 102.26551818847656
  len = 87.99720764160156

len比形状快