【问题标题】:find index of values that exceed previous values in a numpy array查找超过numpy数组中先前值的值的索引
【发布时间】:2018-08-28 12:18:21
【问题描述】:

我有一个 numpy 数组:

>>> n1 = np.array([[1, 4], [1, 5], [2, 4], [7, 2], [1, 3], [4, 7], [2, 9]])
>>> n1
array([[1, 4],
       [1, 5],
       [2, 4],
       [7, 2],
       [1, 3],
       [4, 7],
       [2, 9]])

我正在寻找一种方法来查找在出现大于它的值之后的第一列中出现值的索引。在这种情况下,我想要:

array([4, 6])

因为值1小于7,而值2小于4(都在第0列)

有没有很好的 Pythonic 方式来做到这一点?

【问题讨论】:

  • n1[1:,:]-n1[:-1,:],连续行之间的区别。
  • 嗨@hpaulj,谢谢。通过分配一个仅包含n1 的第0 列的新数组n2,并使用您的建议,我构建了np.where(n2[1:]-n2[:-1] < 0),它给了我(array([3, 5]),),而不是array([4, 6])
  • where 给出一个元组,每个条件维度一个元素。您的案例是 1d,因此结果是 1 个元素的元组。

标签: python numpy


【解决方案1】:

您可以在第一列使用numpy.diff 并找出其中的值为负数。

np.where(np.diff(n1[:, 0]) < 0)

如果需要,添加1 以调整索引。

【讨论】:

  • 谢谢@busybear,这给了我(array([3,5]),),这不是我想要的(当然我承认你说要玩1来调整索引)
  • 您是否正在寻找无需加 1 的解决方案?似乎是一个微不足道的步骤。
  • 是的。这有点迂腐。不过,对于任何正在寻找的人,请执行以下操作:n2 = np.where(np.diff(n1[:, 0]) < 0),然后是n3 = np.sum(n2, 1),它会根据需要为您提供array([4, 6])
猜你喜欢
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
相关资源
最近更新 更多