【问题标题】:Numpy: Comparison within Multidimensional array valuesNumpy:多维数组值内的比较
【发布时间】:2012-11-24 08:40:10
【问题描述】:

我有一个如下形式的二维数组:

[[X1, X2, ..., XN]
[Y1, Y2, ..., YN]]

对于每个大于lower_limit_X 且小于upper_limit_XXi,我想获得 大于lower_limit_Y 且小于Yi 的数量upper_limit_Y.

我希望在 Numpy 中除了逐个索引之外还有一种有效的方法。

编辑: 所以我有一个 2xN 数组。第一行有 N X 的有序值,第二行有 N Y 的有序值。我想得到的是:

  1. 获取 X 的 lowest_indexhighest_index 索引,其值大于 lower_limit_X 且小于 upper_limit_X

  2. 然后在索引范围[lowest_index,highest_index]中切片Y数组(只有一个数组)

  3. 计算我的切片中的元素数量,有 Yi's that are greater thanlower_limit_Yand less thanupper_limit_Y`。

【问题讨论】:

  • 当您说“对于每个 Xi”时,您是指有多行 Y,还是您的意思是“对于 Xi 的每个唯一值”?
  • 不确定是否理解... 每个 Xi 都有一个 Yi 数组吗?编辑:好的,实际上与 NPE 相同的问题

标签: python multidimensional-array numpy indexing slice


【解决方案1】:

试试numpy.logical_and

      numpy.logical_and(array1 > lower_x_limt, array1 < upper_x_limit) 

这将进行元素比较并在具有您的值的索引处返回一个布尔列表。

【讨论】:

    【解决方案2】:

    这里有两种方法你可以做到这一点,更严格的方法可能是,

    mask = ((lower_x_limit < array[0]) & (array[0] < upper_x_limit) &
            (lower_y_limit < array[1]) & (array[1] < upper_y_limit))
    count = sum(mask)
    

    如果您的数组非常大并且 x 和 y 都已排序,您可以改用 searchsorted

    start = array[0].searchsorted(lower_x_limit, 'right')
    end = array[0].searchsorted(upper_x_limit, 'left')
    temp = array[1, start:end]
    start = temp.searchsorted(lower_y_limit, 'right')
    end = temp.searchsorted(upper_y_limit, 'left')
    count = end - start
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 2021-12-08
      • 2021-07-24
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多