我正在编写一个程序,以可视方式表示温度。网格中有200个数据点,我正在使用插值法填充这些点之间的像素。
我编写了一个程序,该程序使用反距离权重(在这种情况下为修改后的Shepards方法)输出所需的数据,给出的图像如下所示:
删除所有不相关的内容(例如图像库内容)后,创建该代码的代码如下所示:
首先,计算每个点到每个管的所有距离和总距离(因为它们是不变的)。在这一点上,我并不特别担心所花费的时间,因为它只执行一次,但是我包含了代码,因此您可以看到值的存储方式。
#set_tubes creates an array of tubes (which is the data I'm working on)
#each tube has an x position in pixels, a y position in pixels and a temperature
self.set_tubes()
self.dists = []
for x in range(1,BASE_WIDTH-1):
self.summed_dists.append([])
self.dists.append([])
for y in range(1,BASE_HEIGHT-1):
self.summed_dists[x-1].append([])
self.dists[x-1].append([])
self.summed_dists[x-1][y-1]=0
for row in range(10):
self.dists[x-1][y-1].append([])
for tube in range(20):
dist = np.sqrt((x-self.tubes[row][tube].xPos)**2+(y-self.tubes[row][tube].yPos)**2)+0.1
#The -3 in the next two lines is simply a weighting factor
self.dists[x-1][y-1][row].append(dist**(-3))
self.summed_dists[x-1][y-1] = self.summed_dists[x-1][y-1] + dist**(-3) …Run Code Online (Sandbox Code Playgroud) 我正在尝试加速部分代码,包括循环并在大型2D数组中设置值.其中一个建议是我尝试预先分配数组而不是使用.append(),但有人指出在Python中.append()是一个分摊的O(1)操作.
但是,当我使用以下代码测试它时:
import time
x = list()
z = list()
t1 = time.time()
for i in range(10000):
z.append([])
for j in range(10000):
z[i].append(0)
t1 = time.time()
for i in range(10000):
x.append([])
for j in range(10000):
x[i].append(1)
print(time.time()-t1)
t1 = time.time()
for i in range(10000):
for j in range(10000):
z[i][j] = 1
print(time.time()-t1)
Run Code Online (Sandbox Code Playgroud)
我毫不犹豫地得到预先分配的阵列比没有预先分配的阵列少了3-4秒(~17秒与~21相比).这段代码中导致基于.append()的函数花费的时间比替换预分配数组中的值要长吗?