我怎么能在python中的矩阵中交换列表?

问题描述 投票:1回答:2

我想要改组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

我怎么能在矩阵中交换列表?

谢谢

python numpy swap
2个回答
1
投票
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)

1
投票

如果你想沿第一轴移动,只需使用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]]]
© www.soinside.com 2019 - 2024. All rights reserved.