1

次の形式の 2D 配列があります。

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

大なり小なりそれぞれについて、Xi大なり小なりのを取得したいと思います。lower_limit_Xupper_limit_X Yilower_limit_Yupper_limit_Y

1 つずつインデックスを作成する以外に、Numpy でこれを行う効率的な方法があることを願っています。

編集:だから私は 2xN 配列を持っています。最初の行には N 個の X の順序付けられた値があり、2 番目の行には N 個の Y の順序付けられた値があります。私が取得したいのは次のとおりです。

  1. より大きい値と小さい値を持つ X のインデックスlowest_indexとインデックスを取得するhighest_indexlower_limit_Xupper_limit_X

  2. lowest_index次に、インデックス範囲 [ 、highest_index]で Y 配列 (1 つの配列のみ) をスライスします。

  3. 's that are greater thanYi lower_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

これを行うには 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
于 2012-12-06T16:34:35.743 に答える