【问题标题】:Split a NumPy array into subarrays according to the values (sorted in ascending order) of another array根据另一个数组的值(按升序排序)将 NumPy 数组拆分为子数组
【发布时间】:2021-03-17 20:08:53
【问题描述】:

假设我有两个 NumPy 数组

x = [[5, 2, 8],
     [4, 9, 1],
     [7, 8, 9],
     [1, 3, 5],
     [1, 2, 3],
     [1, 2, 4]]
y = [0, 0, 1, 1, 1, 2] 

我想根据y中的值有效地将数组x拆分成子数组。

我想要的输出是

z_0 = [[5, 2, 8],
       [4, 9, 1]]
z_1 = [[7, 8, 9],
       [1, 3, 5],
       [1, 2, 3]]
z_2 = [[1, 2, 4]]

假设y 以零开头并按升序排序,那么最有效的方法是什么?

注意:这个问题是这个问题的排序版本: Split a NumPy array into subarrays according to the values (not sorted, but grouped) of another array

【问题讨论】:

  • 那些不是 numpy 数组

标签: python arrays numpy numpy-ndarray


【解决方案1】:

如果y被分组(不必排序),可以使用diff获取分割点:

indices = np.flatnonzero(np.diff(y)) + 1

您可以将这些直接传递给np.split

z = np.split(x, indices, axis=0)

如果你也想知道标签:

labels = y[np.r_[0, indices]]

【讨论】: