使用 numpy 生成数组排列的长列表(重复)
Posted
技术标签:
【中文标题】使用 numpy 生成数组排列的长列表(重复)【英文标题】:generate long list (with repetition) of permutations of an array with 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())
。
【参考方案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.repeat
或np.tile
重复您的A N 次并将结果重新整形为像crr
这样的二维数组,您可以这样做以达到最终目标:
In [69]: for v in crr:
...: np.random.shuffle(v)
【讨论】:
以上是关于使用 numpy 生成数组排列的长列表(重复)的主要内容,如果未能解决你的问题,请参考以下文章
ExpandableListView 数组列表不会按我放置的顺序排列[重复]