小编MDT*_*MDT的帖子

内插热图的有效方法

我正在编写一个程序,以可视方式表示温度。网格中有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)

python interpolation

5
推荐指数
1
解决办法
1847
查看次数

为什么.append()比在预先分配的数组中设置值慢?

我正在尝试加速部分代码,包括循环并在大型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()的函数花费的时间比替换预分配数组中的值要长吗?

python time list

3
推荐指数
1
解决办法
3147
查看次数

标签 统计

python ×2

interpolation ×1

list ×1

time ×1