numpy 如何创建一个一维数组,该数组包含二维数组的值?

1sbrub3j  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个输入numpy 2D数组:

[
  [2, 1],
  [1, 1],
  [2, 2],
  [2, 2],
  [1, 1],
  [1, 1],
  [2, 1],
  [1, 1],
  [1, 2],
  [1, 2]
]

我想创建一个1D数组,为每个组合分配一个唯一的(但任意的)值,就像这样:

[            [
  [2, 1], ->   0,
  [1, 1], ->   1,
  [2, 2], ->   2,
  [2, 2], ->   2,
  [1, 1], ->   1,
  [1, 1], ->   1,
  [2, 1], ->   0,
  [1, 1], ->   1,
  [1, 2], ->   3,
  [1, 2]  ->   3,
]            ]

实际数据有数百万行和未知的可能值,那么有没有一种有效的方法来实现这一点?

cedebl8k

cedebl8k1#

您可以使用np.unique将一组“ID”获取到数组的唯一行中。
给定一个2D输入数组arr

unique_rows, row_ids = np.unique(arr, axis=0, return_inverse=True)

将为row_ids分配一个“唯一行ID”的一维数组,并在unique_rows中分配相应的行值。
对于您的示例,我们得到以下结果:

arr = [
    [2, 1],
    [1, 1],
    [2, 2],
    [2, 2],
    [1, 1],
    [1, 1],
    [2, 1],
    [1, 1],
    [1, 2],
    [1, 2]
]

>>> unique_rows, row_ids = np.unique(arr, axis=0, return_inverse=True)

>>> unique_rows
array([[1, 1],
       [1, 2],
       [2, 1],
       [2, 2]])

>>> row_ids
array([2, 0, 3, 3, 0, 0, 2, 0, 1, 1])

相关问题