当前位置: 首页 > 知识库问答 >
问题:

根据另一个数组的值(按升序排序)将 NumPy 数组拆分为子数组

曾成天
2023-03-14

假设我有两个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以零开始并按升序排序,那么最有效的方法是什么?

注意:这个问题是这个问题的排序版本:根据另一个数组的值(未排序,而是分组)将NumPy数组拆分为子数组

共有1个答案

佟和安
2023-03-14

如果< code>y是成组的(不必排序),您可以使用< code>diff来获取拆分点:

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

您可以将它们直接传递给< code>np.split:

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

如果您也想知道标签:

labels = y[np.r_[0, indices]]
 类似资料:
  • 假设我有两个 NumPy 数组 注意:(中的值没有以任何方式排序。我选择这个例子是为了更好地说明这个例子)(这只是和的两个例子。和的值可以是任意多个不同的数字,可以有任意不同的数字,但是中的值总是和中的值一样多) 我想根据中的值有效地将数组拆分为子数组。 我想要的输出是 假设 从零开始并且没有排序而是分组,最有效的方法是什么? 注意:这个问题是这个问题的未排序版本:根据另一个数组的值(按升序排序)

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 在 Java 中,如何根据另一个排序数组的索引顺序对数组进行排序?例如,如果我有: 我按升序对 arr2 进行排序 我希望另一个是: 我怎么能做到这是Java?我知道我会保存新的排序数组到新的实例。任何帮助,谢谢!

  • 我有一个这样的数组: 。我想将数组按不同的组进行排序,如下所示: 因此,正如您所看到的,排序方法应该将所有数组分组,它们的值匹配在一起(如升序行) 因此,以上示例中的值-- 组-- 顺便说一句:my_array-数组已经排序,因此

  • 问题内容: 我有多个数组,我想根据其中一个的排序顺序对所有数组进行排序,如下所示: 我希望函数执行后,数组将如下所示: 问题答案: 您可以执行以下操作:首先根据键控数组的索引的索引对它们进行索引的值对它们进行排序,然后使用: 如果要在任何类型的集合上使它通用(但仍以与std lib集合算法相同的样式返回数组): 以及带有自定义比较器的版本: