Compare Methods

import numpy
import perfplot
perfplot.show(
    setup=lambda n: numpy.random.rand(n),
    kernels=[
        lambda a: numpy.r_[a, a],
        lambda a: numpy.stack([a, a]).reshape(-1),
        lambda a: numpy.hstack([a, a]),
        lambda a: numpy.concatenate([a, a])
        ],
    labels=['r_', 'stack+reshape', 'hstack', 'concatenate'],
    n_range=[2**k for k in range(19)],
    xlabel='len(a)',
    logx=True,
    logy=True,
    )
  0%|          | 0/19 [00:00<?, ?it/s]
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:00,  3.00it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.68it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.95it/s]
  5%|▌         | 1/19 [00:00<00:13,  1.30it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:00,  3.19it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.61it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.73it/s]
 11%|█         | 2/19 [00:01<00:14,  1.16it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:00,  3.54it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.83it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.96it/s]
 16%|█▌        | 3/19 [00:02<00:14,  1.14it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.20it/s]
 50%|█████     | 2/4 [00:00<00:00,  2.55it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.02it/s]
 21%|██        | 4/19 [00:03<00:13,  1.09it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 50%|█████     | 2/4 [00:00<00:00,  5.33it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  5.44it/s]
 26%|██▋       | 5/19 [00:04<00:12,  1.16it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.74it/s]
 50%|█████     | 2/4 [00:00<00:00,  2.96it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.06it/s]
 32%|███▏      | 6/19 [00:05<00:12,  1.07it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.84it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.26it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.64it/s]
 37%|███▋      | 7/19 [00:06<00:11,  1.07it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:00,  3.04it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.19it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.65it/s]
 42%|████▏     | 8/19 [00:07<00:10,  1.06it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  1.94it/s]
 50%|█████     | 2/4 [00:00<00:00,  2.48it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.11it/s]
 47%|████▋     | 9/19 [00:08<00:09,  1.05it/s][A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:00,  3.28it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.65it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.74it/s]
 53%|█████▎    | 10/19 [00:09<00:08,  1.04it/s]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.95it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.18it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  3.41it/s]
 58%|█████▊    | 11/19 [00:10<00:08,  1.00s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:00,  3.64it/s]
 50%|█████     | 2/4 [00:00<00:00,  3.85it/s]
 75%|███████▌  | 3/4 [00:00<00:00,  4.22it/s]
 63%|██████▎   | 12/19 [00:11<00:06,  1.01it/s]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  1.82it/s]
 50%|█████     | 2/4 [00:00<00:00,  2.11it/s]
 75%|███████▌  | 3/4 [00:01<00:00,  2.36it/s]
 68%|██████▊   | 13/19 [00:13<00:07,  1.20s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  1.69it/s]
 50%|█████     | 2/4 [00:00<00:01,  1.93it/s]
 75%|███████▌  | 3/4 [00:01<00:00,  2.13it/s]
 74%|███████▎  | 14/19 [00:14<00:06,  1.37s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  1.62it/s]
 50%|█████     | 2/4 [00:01<00:01,  1.77it/s]
 75%|███████▌  | 3/4 [00:01<00:00,  2.11it/s]
 79%|███████▉  | 15/19 [00:16<00:06,  1.51s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.35it/s]
 50%|█████     | 2/4 [00:00<00:00,  2.22it/s]
 75%|███████▌  | 3/4 [00:01<00:00,  2.16it/s]
 84%|████████▍ | 16/19 [00:18<00:04,  1.55s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.67it/s]
 50%|█████     | 2/4 [00:00<00:00,  2.66it/s]
 75%|███████▌  | 3/4 [00:01<00:00,  2.54it/s]
 89%|████████▉ | 17/19 [00:20<00:03,  1.59s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  1.52it/s]
 50%|█████     | 2/4 [00:01<00:01,  1.50it/s]
 75%|███████▌  | 3/4 [00:02<00:00,  1.47it/s]
 95%|█████████▍| 18/19 [00:23<00:01,  1.99s/it]A
  0%|          | 0/4 [00:00<?, ?it/s]
 25%|██▌       | 1/4 [00:00<00:01,  2.97it/s]
 50%|█████     | 2/4 [00:01<00:01,  1.90it/s]
 75%|███████▌  | 3/4 [00:02<00:00,  1.50it/s]
100%|██████████| 19/19 [00:25<00:00,  2.27s/it]A

png