簡體   English   中英

隨機排列一個 numpy 數組

[英]Shuffle a numpy array

我有一個想要洗牌的二維 numpy 數組。 是將其重塑為 1-d、洗牌並再次重塑為 2-d 的最佳方法還是可以在不重塑的情況下進行洗牌?

僅使用 random.shuffle 不會產生預期結果,而 numpy.random.shuffle 僅會隨機播放行:

import random
import numpy as np
a=np.arange(9).reshape((3,3))
random.shuffle(a)
print a

[[0 1 2]
 [3 4 5]
 [3 4 5]]

a=np.arange(9).reshape((3,3))
np.random.shuffle(a)
print a

[[6 7 8]
 [3 4 5]
 [0 1 2]]

你可以告訴np.random.shuffle對扁平化的版本采取行動:

>>> a = np.arange(9).reshape((3,3))
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.random.shuffle(a.flat)
>>> a
array([[3, 5, 8],
       [7, 6, 2],
       [1, 4, 0]])

你可以洗牌a.flat

>>> np.random.shuffle(a.flat)
>>> a
array([[6, 1, 2],
       [3, 5, 0],
       [7, 8, 4]])

我認為這一點非常重要
如果a是一維 numpy 數組,則可以使用random.shuffle(a) 如果它是 ND(其中 N > 2)比

random.shuffle(a)

會破壞你的數據並返回一些隨機的東西。 正如你在這里看到的:

import random
import numpy as np
a=np.arange(9).reshape((3,3))
random.shuffle(a)
print a

[[0 1 2]
 [3 4 5]
 [3 4 5]]

這是 numpy 的一個已知錯誤(或功能?)。

因此,僅將numpy.random.shuffle(a)用於numpy arrays

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM