Beispiel #1
0
def test_speed_comparison1(filename=None, n_range=None):
    plt.style.use(dufte.style)

    if n_range is None:
        n_range = [2 ** k for k in range(2)]

    numpy.random.seed(0)
    perfplot.plot(
        setup=lambda n: numpy.random.rand(n, 100),
        kernels=[
            sum,
            lambda p: numpy.sum(p, axis=0),
            accupy.kahan_sum,
            lambda p: accupy.ksum(p, K=2),
            lambda p: accupy.ksum(p, K=3),
            accupy.fsum,
        ],
        labels=[
            "sum",
            "numpy.sum",
            "accupy.kahan_sum",
            "accupy.ksum[2]",
            "accupy.ksum[3]",
            "accupy.fsum",
        ],
        n_range=n_range,
        xlabel="n",
    )
    plt.title("Sum(random(n, 100))")

    # plt.show()
    if filename:
        plt.savefig(filename, transparent=True, bbox_inches="tight")
Beispiel #2
0
def test_accuracy_comparison_illcond(target_conds=None):
    if target_conds is None:
        target_conds = [10 ** k for k in range(1, 2)]

    kernels = [
        sum,
        numpy.sum,
        accupy.kahan_sum,
        lambda p: accupy.ksum(p, K=2),
        lambda p: accupy.ksum(p, K=3),
        accupy.fsum,
    ]
    labels = [
        "sum",
        "numpy.sum",
        "accupy.kahan_sum",
        "accupy.ksum[2]",
        "accupy.ksum[3]",
        "accupy.fsum",
    ]
    colors = plt.rcParams["axes.prop_cycle"].by_key()["color"][: len(labels)]

    data = numpy.empty((len(target_conds), len(kernels)))
    condition_numbers = numpy.empty(len(target_conds))
    numpy.random.seed(0)
    for k, target_cond in enumerate(target_conds):
        p, ref, C = accupy.generate_ill_conditioned_sum(1000, target_cond)
        condition_numbers[k] = C
        data[k] = [abs(kernel(p) - ref) / abs(ref) for kernel in kernels]

    # sort
    s = numpy.argsort(condition_numbers)
    condition_numbers = condition_numbers[s]
    data = data[s]

    for label, color, d in zip(labels, colors, data.T):
        plt.loglog(condition_numbers, d, label=label, color=color)

    lgd = plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0)
    plt.grid()
    plt.ylim(5.0e-18, 1.0)
    plt.xlabel("condition number")
    plt.ylabel("relative error")
    plt.gca().set_aspect(1.3)

    # plt.show()
    # <https://stackoverflow.com/a/10154763/353337>
    plt.savefig(
        "accuracy-sums.png",
        transparent=True,
        bbox_extra_artists=(lgd,),
        bbox_inches="tight",
    )
    return
Beispiel #3
0
def test_accuracy_comparison_illcond(filename=None, target_conds=None):
    plt.style.use(dufte.style)

    if target_conds is None:
        target_conds = [10 ** k for k in range(1, 2)]

    kernels = [
        sum,
        numpy.sum,
        accupy.kahan_sum,
        lambda p: accupy.ksum(p, K=2),
        lambda p: accupy.ksum(p, K=3),
        accupy.fsum,
    ]
    labels = [
        "sum",
        "numpy.sum",
        "accupy.kahan_sum",
        "accupy.ksum[2]",
        "accupy.ksum[3]",
        "accupy.fsum",
    ]
    colors = plt.rcParams["axes.prop_cycle"].by_key()["color"][: len(labels)]

    data = numpy.empty((len(target_conds), len(kernels)))
    condition_numbers = numpy.empty(len(target_conds))
    numpy.random.seed(0)
    for k, target_cond in enumerate(target_conds):
        p, ref, C = accupy.generate_ill_conditioned_sum(1000, target_cond)
        condition_numbers[k] = C
        data[k] = [abs(kernel(p) - ref) / abs(ref) for kernel in kernels]

    # sort
    s = numpy.argsort(condition_numbers)
    condition_numbers = condition_numbers[s]
    data = data[s]

    for label, color, d in zip(labels, colors, data.T):
        plt.loglog(condition_numbers, d, label=label, color=color)

    dufte.legend()
    plt.xlabel("condition number")
    plt.ylabel("relative error")
    # plt.gca().set_aspect(1.3)

    # plt.show()
    # <https://stackoverflow.com/a/10154763/353337>
    if filename:
        plt.savefig(filename, transparent=True, bbox_inches="tight")
Beispiel #4
0
def test_speed_comparison1(n_range=None):
    if n_range is None:
        n_range = [2 ** k for k in range(2)]

    numpy.random.seed(0)
    perfplot.plot(
        setup=lambda n: numpy.random.rand(n, 100),
        kernels=[
            sum,
            lambda p: numpy.sum(p, axis=0),
            accupy.kahan_sum,
            lambda p: accupy.ksum(p, K=2),
            lambda p: accupy.ksum(p, K=3),
            accupy.fsum,
        ],
        labels=[
            "sum",
            "numpy.sum",
            "accupy.kahan_sum",
            "accupy.ksum[2]",
            "accupy.ksum[3]",
            "accupy.fsum",
        ],
        colors=plt.rcParams["axes.prop_cycle"].by_key()["color"][:6],
        n_range=n_range,
        title="Sum(random(n, 100))",
        xlabel="n",
        logx=True,
        logy=True,
        automatic_order=False,
    )
    plt.gca().set_aspect(0.5)
    lgd = plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0)
    # plt.show()
    plt.savefig(
        "speed-comparison1.png",
        transparent=True,
        bbox_extra_artists=(lgd,),
        bbox_inches="tight",
    )
    return
Beispiel #5
0
def test_speed_comparison1(n_range=None):
    if n_range is None:
        n_range = [2**k for k in range(2)]

    perfplot.plot(setup=lambda n: numpy.random.rand(n, 100),
                  kernels=[
                      sum,
                      lambda p: numpy.sum(p, axis=0),
                      accupy.kahan_sum,
                      lambda p: accupy.ksum(p, K=2),
                      lambda p: accupy.ksum(p, K=3),
                      accupy.fsum,
                  ],
                  labels=[
                      'sum',
                      'numpy.sum',
                      'accupy.kahan_sum',
                      'accupy.ksum[2]',
                      'accupy.ksum[3]',
                      'accupy.fsum',
                  ],
                  colors=plt.rcParams['axes.prop_cycle'].by_key()['color'][:6],
                  n_range=n_range,
                  title='Sum(random(n, 100))',
                  xlabel='n',
                  logx=True,
                  logy=True,
                  automatic_order=False)
    plt.gca().set_aspect(0.5)
    lgd = plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0)
    # plt.show()
    plt.savefig(
        'speed-comparison1.png',
        transparent=True,
        bbox_extra_artists=(lgd, ),
        bbox_inches='tight',
    )
    return
Beispiel #6
0
def test_discontiguous():
    x = numpy.random.rand(3, 10).T

    accupy.ksum(x.T)
    accupy.fsum(x.T)
    return
Beispiel #7
0
def test_ksum3(cond):
    p, ref, _ = accupy.generate_ill_conditioned_sum(100, cond)
    assert abs(accupy.ksum(p, K=3) - ref) < 1.0e-15 * abs(ref)
    return