我有一个坐标数组:
points = [x,y]
(numpy)尺寸/形状:(18,1,2)
在matlab中,要初始化一个数组以使用'3'索引这些点,我可以这样做:
A = ones(size(points,1),1)*3'
我怎样才能以最快的方式使用python3和numpy?
答案 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...
表达式中,shape
或len()
只是计算时间的一小部分。你使用哪个并不重要。但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比形状快