我想通过perfplot展示一些使用多个参数的函数的性能,但我不知道如何做到这一点(我对perfplot不太熟悉).一个说broadcast all args to just x,但我还不知道如何使用它.假设我们有以下功能:

from scipy.ndimage import zoom
import numpy as np

f = 5
n = 3
arr = np.random.random_integers(0, 1, (f, f))

def scipy_zoom(arr, n):
    return zoom(arr, n)

def numpy_rep(arr, n):
    return arr.repeat(n, 0).repeat(n, 1)

fn的变化都需要判断,似乎最好分别绘制它们,即一旦f不变,n变化,反之亦然.我不知道如果3D perfplot人能被策划出来,这会有多容易理解(this will be useful if be shown in the answers, but not the main aim of this question).

推荐答案

对于两个参数,我们可以收集所有基准计时,将arr大小的范围设置为f,将functools.partial设置为f,将n设置为perfplot

import perfplot
from functools import partial

res = []
for f in range(5,100,20):
    arr = np.random.randint(0, 2, (f, f))
    g = perfplot.bench(
        setup=lambda n: n,
        kernels=[partial(scipy_zoom, arr),
                 partial(numpy_rep, arr)],
        labels=['zoom','numpy'],
        n_range=[2,3,4,5,6,7,8,9,10],
        equality_check=False # results are not equal!
    )
    res.append(g)

并绘制二维线打印图层的三维图形.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from cycler import cycler


fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')
cc = cycler(color=list('rg'))

for i, g in zip(range(5,100,20)[::-1],res[::-1]):  # plot from back to front
    ax.plot(g.n_range,g.timings_s.T, i, zdir='y', alpha=0.8)

plt.rc('axes', prop_cycle=cc)
ax.set_xlabel('n')
ax.set_ylabel('f')
ax.set_zlabel('seconds')
ax.legend(g.labels)
plt.show()

输出

results

Python相关问答推荐

对某些列的总数进行民意调查,但不单独列出每列

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

如何避免Chained when/then分配中的Mypy不兼容类型警告?

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

如何让Flask 中的请求标签发挥作用

我如何使法国在 map 中完全透明的代码?

使用Python从URL下载Excel文件

如何从需要点击/切换的网页中提取表格?

matplotlib图中的复杂箭头形状

在pandas/python中计数嵌套类别

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

如何在Great Table中处理inf和nans

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

如何求相邻对序列中元素 Select 的最小代价

如何在Airflow执行日期中保留日期并将时间转换为00:00

Seaborn散点图使用多个不同的标记而不是点

Pandas:计数器的滚动和,复位

PYTHON中的selenium不会打开 chromium URL

将鼠标悬停在海运`pairplot`的批注/高亮显示上

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)