【问题标题】:generate long list (with repetition) of permutations of an array with numpy使用 numpy 生成数组排列的长列表(重复)
【发布时间】:2020-01-12 01:36:53
【问题描述】:

我希望能够生成一个(任意长度的)数组列表, 每个数组都是一个数组 A 的随机排列。

this python option:

for x in range(n):
    random.shuffle(A)
    routes.append(A)

但我怀疑使用 numpy 实现这一目标的程序性较少。有什么建议吗?

【问题讨论】:

  • 我认为你的方法已经足够好了。除了 shuffle 可以正常工作,因此您必须将 routes.append(A) 替换为 routes.append(A.copy())

标签: python arrays numpy


【解决方案1】:

考虑这个例子:

In [59]: crr
Out[59]: 
array([[0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938]])

In [60]: np.random.shuffle(crr[0])

In [61]: crr
Out[61]: 
array([[0.42109715, 0.50779425, 0.93753455, 0.11773652, 0.08751938,
        0.83704624],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938],
       [0.83704624, 0.42109715, 0.50779425, 0.93753455, 0.11773652,
        0.08751938]])

由于随机洗牌是就地的,这里我们可以只指定要洗牌的第一行。因此,如果您使用np.repeatnp.tile 重复您的A N 次并将结果重新整形为像crr 这样的二维数组,您可以这样做以达到最终目标:

In [69]: for v in crr:
    ...:     np.random.shuffle(v)

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 2016-10-01
    • 2011-03-07
    • 2014-03-15
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多