首页 > 解决方案 > 跨不同维度移动唯一值

问题描述

我有一个要求,我想通过在 3 个维度上分离 3 个唯一值来将 2D 矩阵转换为 3D。例如:转换

A = [1  2  3  3
     1  1  2  1
     3  2  2  3
     1  3  3  2]

A = [[1  0  0  0
      1  1  0  1
      0  0  0  0
      1  0  0  0]

     [0  1  0  0
      0  0  1  0
      0  1  1  0
      0  0  0  1]

     [0  0  1  1
      0  0  0  0
      1  0  0  1
      0  1  1  0]]

如果矩阵表示的语法不正确,请原谅我。

标签: pythonpython-3.xlistnumpy

解决方案


您可以使用np.unique并利用布尔数组并将它们转换为 int 使用numpy.ndarray.astype.

import numpy as np
a=np.array([[1, 2, 3, 3], [1, 1, 2, 1], [3, 2, 2, 3], [1, 3, 3, 2]])

[a==i.astype(int) for i in np.unique(a)]

输出:

[array([[1, 0, 0, 0],
        [1, 1, 0, 1],
        [0, 0, 0, 0],
        [1, 0, 0, 0]]), 
 array([[0, 1, 0, 0],
        [0, 0, 1, 0],
        [0, 1, 1, 0],
        [0, 0, 0, 1]]), 
 array([[0, 0, 1, 1],
        [0, 0, 0, 0],
        [1, 0, 0, 1],
        [0, 1, 1, 0]])]

推荐阅读