我如何交换 python 矩阵中的列表?

how can i swap list in a matrix in python?

我想打乱 3D 矩阵的行,但它在矩阵中不起作用 这是一些示例代码

def shuffle(data,data_size):
    for step in range(int(1*data_size)):
        selected = int(np.random.uniform(0,data_size))
        target = int(np.random.uniform(0,data_size))   

        print(data)
        if selected!=target:
            data[selected], data[target] = data[target], data[selected]            

            print(selected," and ",target, " are changed")
    return data

data = [[[1,2,3,4],[1,2,3,5],[1,2,3,6]],
        [[2,2,3,4],[2,2,3,5],[2,2,3,6]],
        [[3,2,3,4],[3,2,3,5],[3,2,3,6]] ]

data = np.array(data)
data = shuffle(data,3)

在这段代码中,我想将数据从某个行列表洗牌到另一个行列表

但它的结果不能交换而是覆盖

这是结果

[[[1 2 3 4]
  [1 2 3 5]
  [1 2 3 6]]

 [[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]

 [[3 2 3 4]
  [3 2 3 5]
  [3 2 3 6]]]
2  and  1  are changed
[[[1 2 3 4]
  [1 2 3 5]
  [1 2 3 6]]

 [[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]

 [[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]]
1  and  0  are changed
[[[1 2 3 4]
  [1 2 3 5]
  [1 2 3 6]]

 [[1 2 3 4]
  [1 2 3 5]
  [1 2 3 6]]

 [[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]]
0  and  2  are changed
[[[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]

 [[1 2 3 4]
  [1 2 3 5]
  [1 2 3 6]]

 [[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]]
2  and  1  are changed

如何交换矩阵中的列表?

谢谢

import numpy as np

def shuffle(data,data_size):
    for step in range(int(1*data_size)):
        selected = int(np.random.uniform(0,data_size))
        target = int(np.random.uniform(0,data_size))   

        print(data)
        if selected!=target:

            data[[selected, target]] = data[[target, selected]]      

            print(selected," and ",target, " are changed")
    return data

data = [[[1,2,3,4],[1,2,3,5],[1,2,3,6]],
        [[2,2,3,4],[2,2,3,5],[2,2,3,6]],
        [[3,2,3,4],[3,2,3,5],[3,2,3,6]] ]

data = np.array(data)
data = shuffle(data,3)

如果要沿第一个轴随机播放,只需使用 np.random.shuffle:

data = np.array([
    [[1,2,3,4],[1,2,3,5],[1,2,3,6]],
    [[2,2,3,4],[2,2,3,5],[2,2,3,6]],
    [[3,2,3,4],[3,2,3,5],[3,2,3,6]]
])

np.random.shuffle(data)
print(data)

输出:

[[[3 2 3 4]
  [3 2 3 5]
  [3 2 3 6]]

 [[1 2 3 4]
  [1 2 3 5]
  [1 2 3 6]]

 [[2 2 3 4]
  [2 2 3 5]
  [2 2 3 6]]]

如果您想沿 data 中的任何其他轴打乱,您可以打乱 np.swapaxes 返回的数组视图。例如,要打乱内部 2D 矩阵的行,请执行:

swap = np.swapaxes(data, 1, 0)
np.random.shuffle(swap)
print(data)

输出:

[[[1 2 3 6]
  [1 2 3 4]
  [1 2 3 5]]

 [[2 2 3 6]
  [2 2 3 4]
  [2 2 3 5]]

 [[3 2 3 6]
  [3 2 3 4]
  [3 2 3 5]]]