在numpy.searchsorted中這是一種有趣的行爲。以下測試失敗:我在做什麼numpy searchsorted錯誤?
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,我不知道爲什麼。 但是類似的一個,將它傳遞:
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)
在numpy.array.searchsorted
文檔,其描述表示:
查找索引到排序後的數組一個,使得如果v中的相應元件之前插入指數,a的順序將被保留。
第一輸入'因爲了'不排序的'零「,所以你可能不得不使用'np.searchsorted'的附加輸入arg'sorter'。 – Divakar
@Divakar它被排序是因爲它是一個被屏蔽的數組,所以被屏蔽的值是最後一個和'numpy'來定義這個順序。如果你在'a'上使用'argsort'方法,它會給你索引作爲一個有序序列 – jmbarrios
嗯,是的,我沒有考慮。 – Divakar