numpy 平铺数组,每次随机排列元素的顺序

8yparm6h  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(118)

假设我有一个数组

A = np.linspace(1,5,5)
A = np.array([1,2,3,4,5])

字符串
我想把它平铺5次,每次随机排列顺序,给我给予,

B = myfunc(A)
B = np.array([1,2,3,4,5,1,5,2,3,4,3,4,5,1,2,3,5,1,2,4,2,3,1,4,5])


我该怎么做?
注意,第一个瓷砖不一定要按顺序排列,也不一定要随机化,也可以,无论什么都是最简单的:)
谢谢

z4bn682m

z4bn682m1#

简单实现

import numpy as np

A = np.array([1,2,3,4,5])

def sampleNew(arr):
    out = arr.copy() # Copy the array to avoid overwrite
    np.random.shuffle(out) # Shuffle the copy
    return out

random_samples = np.concatenate([ sampleNew(A) for _ in range(5) ])

# %timeit returns 13.1 µs ± 68.1 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

字符串
我相信有更快的方法。

oewdyzsn

oewdyzsn2#

您可以使用随机数组和numpy.argsortravel对其进行向量化:

N = len(A)
out = A[np.argsort(np.random.random((N, N)), axis=1).ravel()]

字符串
范例:

array([5, 4, 1, 3, 2, 5, 2, 1, 3, 4, 5, 2, 3, 1, 4, 2, 1, 4, 3, 5, 5, 3,
       4, 2, 1])


中间体:

# np.argsort(np.random.random((N, N)), axis=1).ravel()

array([4, 3, 0, 2, 1, 4, 1, 0, 2, 3, 4, 1, 2, 0, 3, 1, 0, 3, 2, 4, 4, 2,
       3, 1, 0])

相关问题