Numpy Seaborn热图绘制执行时间优化 我有一个4D麻木数组,认为第四维是“时间”维度。使用前两个维度将连续帧绘制为二维热图-您将获得一个“动画”。当测量执行时间时,我得到26帧16秒,这相当低。如何加快下面代码的执行时间?我更喜欢使用Seaborn来创建热图,而不是matplotlib(尽管它是后者的扩展)

Numpy Seaborn热图绘制执行时间优化 我有一个4D麻木数组,认为第四维是“时间”维度。使用前两个维度将连续帧绘制为二维热图-您将获得一个“动画”。当测量执行时间时,我得到26帧16秒,这相当低。如何加快下面代码的执行时间?我更喜欢使用Seaborn来创建热图,而不是matplotlib(尽管它是后者的扩展),numpy,optimization,time,heatmap,seaborn,Numpy,Optimization,Time,Heatmap,Seaborn,下面的代码生成与seaborn完全相同的绘图,但速度快10倍(执行时间=约2秒): 如何进行预计算:20*np.log10(np.abs(data))在进入循环之前,在不涉及计算的情况下使用循环中的那些帧?好主意-它将其改进了约4秒-现在在11.7秒内显示26帧。一些数据:我需要大约12.5Hz的帧速率-此数据集的总显示时间应为2-3秒。您需要下拉到matplotlib并使用它们的,例如,执行诸如预生成网格,然后在每次迭代时更新数据和闪烁其余轴的操作。您能给我一些示例代码吗,做类似的任务?我的意

下面的代码生成与seaborn完全相同的绘图,但速度快10倍(执行时间=约2秒):


如何进行预计算:
20*np.log10(np.abs(data))
在进入循环之前,在不涉及计算的情况下使用循环中的那些帧?好主意-它将其改进了约4秒-现在在11.7秒内显示26帧。一些数据:我需要大约12.5Hz的帧速率-此数据集的总显示时间应为2-3秒。您需要下拉到matplotlib并使用它们的,例如,执行诸如预生成网格,然后在每次迭代时更新数据和闪烁其余轴的操作。您能给我一些示例代码吗,做类似的任务?我的意思是将2D numpy阵列绘制为热图,作为动画。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import time

data = np.load('data.npy')

fig = plt.figure()
ax = fig.add_subplot(111)
im = sns.heatmap(np.zeros((256, 128)), cmap = 'viridis', vmin = 0, vmax = 90)
plt.show(block = False)

start = time.time()
for i in range (0, data[0, 0, 0, :].size):
    plt.clf()
    sns.heatmap(20*np.log10(abs(data[:, :, 2, i])), cmap = 'viridis', vmin = 0, vmax = 90)
    fig.canvas.draw()
end = time.time()

print(end - start)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.axes_grid1 import make_axes_locatable
import time

data = np.load('data.npy')
data = 20*np.log10(abs(data))

fig = plt.figure(figsize = (7, 7))
ax = fig.add_subplot(111)

#initialise subfigure (dimensions and parameters)
im = ax.imshow(np.zeros((256, 128)), cmap = 'viridis', vmin = 0, vmax = 90, interpolation = 'none', aspect = 'auto')

#get rid of spines and fix range of axes, rotate x-axis labels
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks(np.arange(0, 128, 5))
ax.yaxis.set_ticks(np.arange(0, 256, 10))
for tick in ax.get_xticklabels():
    tick.set_rotation(90)

#use a divider to fix the size of the colorbar
divider = make_axes_locatable(ax)
#colorbar on the right of ax. Colorbar width in % of ax and space between them is defined by pad in inches
cax = divider.append_axes('right', size = '5%', pad = 0.07) 
cb = fig.colorbar(im, cax = cax)
#remove colorbar frame/spines
cb.outline.set_visible(False)

#don't stop after each subfigure change
plt.show(block = False)

#loop through array
start = time.time()
for i in range(data[0, 0, 2, :].size):
    time.sleep(0.005)
    im.set_array(data[:, :, 0, i])  
    fig.canvas.draw()
stop = time.time()
print(stop-start)