在python中洗牌数组
我有这个阵列:在python中洗牌数组,python,arrays,python-3.x,Python,Arrays,Python 3.x,我有这个阵列: arr=[[1,1,1],[0,0,0],[0,0,0] 我想在第二、第三和第一行随机分配1 例如,想要的结果是: arr=[[1,1,0],[0,0,0],[0,1,0] or arr=[[1,0,0],[0,0,1],[0,1,0] 然而,使用 np.random.shuffle(arr) 结果是洗牌行而不是元素。您可以创建一个扩展列表,洗牌,然后再次分组,如下所示: import numpy as np arr=[[1,1,1],[0,0,0],[0,0,0]]
arr=[[1,1,1],[0,0,0],[0,0,0]
我想在第二、第三和第一行随机分配1
例如,想要的结果是:
arr=[[1,1,0],[0,0,0],[0,1,0] or arr=[[1,0,0],[0,0,1],[0,1,0]
然而,使用
np.random.shuffle(arr)
结果是洗牌行而不是元素。您可以创建一个扩展列表,洗牌,然后再次分组,如下所示:
import numpy as np
arr=[[1,1,1],[0,0,0],[0,0,0]]
extended_array = []
for array in arr:
extended_array.extend(array)
np.random.shuffle(extended_array)
arr = list(zip(*[iter(extended_array)] * 3))
print(arr)
可能的产出:
[(0, 0, 0), (0, 0, 1), (1, 0, 1)]
通过一个例子扩展我的评论,利用和-正如Lucas已经提供的numpy解决方案:
import random
from itertools import chain
arr=[[1,1,0],[0,0,0],[0,1,0]]
# make it a 1-dim list
chained = list(chain.from_iterable(arr))
# shuffle it
random.shuffle(chained)
# repartition it again
new = [chained[i:i+3] for i in range(0,9,3)]
print(new)
输出(多次尝试):
你可以解构你的阵列,洗牌,然后重新构建
import numpy as np
arr=[[1,1,1],[0,0,0],[0,0,0]]
flat_arr = [item for sublist in arr for item in sublist]
np.random.shuffle(flat_arr)
arr=np.array(flat_arr)
np.split(arr,3)
做一个阵列、展平、洗牌和重塑如何:
import numpy as np
arr = np.array([[1,1,1],[0,0,0],[0,0,0]])
flat = np.array(arr.flat)
np.random.shuffle(flat)
result_array = flat.reshape(arr.shape)
你可以这样做
将numpy导入为np
arr=[[1,1,1],[0,0,0],[0,0,0]]
np.随机.置换(np.数组(arr).整形(1,9)[0]).整形(3,3).tolist()
输出(您的可能不同,因为随机性):
[[0,1,1],[0,0,0],[0,0,1]]
说明:
将列表x转换为numpy数组np.array(x)
获取重塑(1,9)
并返回[[[[1,1,1],[0,0,0],[0,0,0]]
,因此我们使用1,1,0,0,0,0,0]]
获得它的第一个元素(整个子列表)[0]
获取一个列表np.random.permutation(x)
,并返回一个随机混合的副本。x
- 我们用它来代替看起来更明显的
,它是破坏性的,它会将列表在适当的位置洗牌,而不是返回副本np.random.shuffle(x)
- 我们用它来代替看起来更明显的
获取我们的重塑(3,3)
列表并将其转换回(1,9)
(3,3)
- 最后,
tolist()
[i:i+3]对于范围(0,9,3)内的i]
可以写得更短,如[i:3]对于范围(3)内的i]
。另外,list(chain.from_iterable(arr))
也可以是list(chain(*arr))
我相信你的解决方案比我的更像python
import numpy as np
arr = np.array([[1,1,1],[0,0,0],[0,0,0]])
flat = np.array(arr.flat)
np.random.shuffle(flat)
result_array = flat.reshape(arr.shape)