說我有陣列
import numpy as np
arr = np.array([1, 1, 2, 2, 3, 3, 4, 4])
我想要一個有很多隨機排列的陣列arr
作為它的行。這是一個有效的解決方案:
np.array([np.random.permutation(arr) for _ in range(100_000)])
但是,這比生成相同形狀的隨機整數陣列要慢,后者不涉及 Python for 回圈:
In [15]: %%timeit
...: np.random.randint(1, 5, size=(100_000, 8))
...:
...:
10 ms ± 102 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [16]: %%timeit
...: np.array([np.random.permutation(arr) for _ in range(100_000)])
...:
...:
1.06 s ± 9.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
有沒有辦法對此進行矢量化,所以當我增加我想生成的排列數量時它不會減慢太多?
uj5u.com熱心網友回復:
我認為numpy.random.Generator.permuted
可以解決您的問題:
import numpy as np
arr = np.array([1, 1, 2, 2, 3, 3, 4, 4])
n = 10
arr = np.tile(arr, (n, 1))
rng = np.random.default_rng()
rng.permuted(arr, axis=1)
輸出:
array([[4, 2, 3, 4, 3, 1, 2, 1],
[3, 2, 4, 1, 1, 3, 4, 2],
[2, 3, 3, 4, 1, 4, 2, 1],
[2, 3, 1, 3, 1, 4, 4, 2],
[2, 1, 2, 1, 4, 4, 3, 3],
[3, 2, 3, 4, 2, 1, 1, 4],
[2, 2, 3, 1, 4, 3, 1, 4],
[1, 3, 3, 4, 1, 2, 2, 4],
[4, 2, 3, 3, 1, 1, 2, 4],
[1, 1, 2, 3, 4, 4, 2, 3]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489403.html