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

如何在python中交换矩阵中的列表?,python,numpy,swap,Python,Numpy,Swap,我想洗牌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 selec

我想洗牌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
如何在矩阵中交换列表


谢谢

如果您想沿着第一个轴移动,只需使用
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]]]
[[[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]]]

如果要沿
数据中的任何其他轴移动,可以移动
np.swapaxes
返回的数组视图。例如,要洗牌内部2D矩阵的行,请执行以下操作:

swap = np.swapaxes(data, 1, 0)
np.random.shuffle(swap)
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]]]
[[[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]]]

您发布的结果来自您当前的非工作代码,对吗?你能举一个你认为你的输出应该是什么样的例子吗?这将使解决问题变得容易得多