[英]Apply same permutation for every row in a 2D numpy array
要置換1D陣列A
我知道您可以運行以下代碼:
import numpy as np
A = np.random.permutation(A)
我有一個2D數組,並希望對數組的每一行應用完全相同的排列。 你有什么辦法可以指定numpy為你做那個嗎?
用於生成中的列數和索引的列隨機置換A
,像這樣-
A[:,np.random.permutation(A.shape[1])]
樣品運行 -
In [100]: A
Out[100]:
array([[3, 5, 7, 4, 7],
[2, 5, 2, 0, 3],
[1, 4, 3, 8, 8]])
In [101]: A[:,np.random.permutation(A.shape[1])]
Out[101]:
array([[7, 5, 7, 4, 3],
[3, 5, 2, 0, 2],
[8, 4, 3, 8, 1]])
實際上你不需要從文檔中做到這一點:
如果x是一個多維數組,它只會沿着它的第一個索引進行混洗。
所以,拿Divakar的陣列:
a = np.array([
[3, 5, 7, 4, 7],
[2, 5, 2, 0, 3],
[1, 4, 3, 8, 8]
])
你可以這樣做: np.random.permutation(a)
並得到類似的東西:
array([[2, 5, 2, 0, 3],
[3, 5, 7, 4, 7],
[1, 4, 3, 8, 8]])
PS如果你需要執行列排列 - 只需要執行np.random.permutation(aT).T
。 類似的東西也適用於多暗陣列。
這取決於你在每一行的意思。
如果要置換所有值(無論行和列),請將數組重新整形為1d,置換,重新整形為2d。
如果您想要排列每一行但不要在不同列中混洗元素,則需要循環通過一個軸並調用置換。
for i in range(len(A)):
A[i] = np.random.permutation(A[i])
它可能會以某種方式縮短,但這就是它可以做到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.