これは、numpy.searchsortedの面白い動作です。次のテストは失敗:numpy検索で何が間違っていますか?
import numpy as np
a = np.ma.masked_array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 0],
mask=[False, False, False, False, False, False, False,
False, False, False, False, False, False, False,
False, False, False, False, False, False, False,
False, False, False, False, False, False, False,
False, False, False, False, False, True],
fill_value=0, dtype='uint8')
b = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33],
dtype='uint8')
expected = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 32])
c = a.searchsorted(b)
np.testing.assert_array_equal(c, expected)
c
配列の最後のエントリは34であり、私は理由を知りません。 しかし、同様のもの、それは合格:numpy.array.searchsorted
マニュアルの
aa = np.ma.masked_array([1, 2, 3, 4, 0],
mask=[False, False, False, False, True],
fill_value=0, dtype='uint8')
bb = np.array([1, 3, 4], dtype='uint8')
expectedd = np.array([0, 2, 3])
cc = aa.searchsorted(bb)
np.testing.assert_array_equal(cc, expectedd)
を、その説明は言った:
は、Vの対応する要素の前に挿入された場合、このようなことがソートされた配列のインデックスを探しますインデックス、aの順序は保持されます。
A'が原因でソートされていない第一の入力を '' 'np.searchsorted'で追加の入力引数' sorter'を使用しなければならないかもしれません。 – Divakar
@Divakarこれはマスクされた配列であり、マスクされた値が最後のものであり、numpyがこの順序を定義するので、ソートされます。 'a'で' argsort'メソッドを使用すると、順序付けられたシーケンスとしてインデックスが得られます – jmbarrios
ええと、私は考慮しなかったのです。 – Divakar