簡體   English   中英

對2D numpy數組中的每一行應用相同的排列

[英]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.

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