1

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

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

对于每个Xi大于lower_limit_X和小于upper_limit_X,我想获得大于和小于的数量Yilower_limit_Yupper_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_Y and less thanupper_limit_Y`。

4

2 回答 2

1

尝试numpy.logical_and

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

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

于 2012-12-06T10:40:12.203 回答
0

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

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
于 2012-12-06T16:34:35.743 回答