Я могу понять следующее поведение numpy.как работает numpy.where?
>>> a
array([[ 0. , 0. , 0. ],
[ 0. , 0.7, 0. ],
[ 0. , 0.3, 0.5],
[ 0.6, 0. , 0.8],
[ 0.7, 0. , 0. ]])
>>> argmax_overlaps = a.argmax(axis=1)
>>> argmax_overlaps
array([0, 1, 2, 2, 0])
>>> max_overlaps = a[np.arange(5),argmax_overlaps]
>>> max_overlaps
array([ 0. , 0.7, 0.5, 0.8, 0.7])
>>> gt_argmax_overlaps = a.argmax(axis=0)
>>> gt_argmax_overlaps
array([4, 1, 3])
>>> gt_max_overlaps = a[gt_argmax_overlaps,np.arange(a.shape[1])]
>>> gt_max_overlaps
array([ 0.7, 0.7, 0.8])
>>> gt_argmax_overlaps = np.where(a == gt_max_overlaps)
>>> gt_argmax_overlaps
(array([1, 3, 4]), array([1, 2, 0]))
я понял, 0,7, 0,7 и 0,8 является [1,1], а [3,2] и [4,0], так что я получил кортеж (array[1,3,4] and array[1,2,0])
каждый массив из которых, состоящих из 0-я и 1-я индексы этих трех элементов. Затем я попробовал другие примеры, чтобы понять, что мое понимание верное.
>>> np.where(a == [0.3])
(array([2]), array([1]))
0,3 находится в [2,1], поэтому результат выглядит так, как я ожидал. Затем я попробовал
>>> np.where(a == [0.3, 0.5])
(array([], dtype=int64),)
?? Я ожидал увидеть (массив ([2,2]), массив ([2,3])). Почему я вижу результат выше?
>>> np.where(a == [0.7, 0.7, 0.8])
(array([1, 3, 4]), array([1, 2, 0]))
>>> np.where(a == [0.8,0.7,0.7])
(array([1]), array([1]))
Не могу понять и второй результат. Может ли кто-нибудь объяснить это мне? Благодарю.
Используйте 'np.where ((a == 0.3) | (a == 0.5))' и 'np.where ((a == 0.7) | (a == 0.8))', чтобы получить правильный результат , Однако я не знаю, почему 'np.where (a == [0.7, 0.7, 0.8])' работает, а 'np.where (a == [0.7.0.8])' выдает 'DeprecationWarning'. Похож на ошибку. – Khris
Когда 'where' дает неожиданные индексы, посмотрите на массив условий. 'where' просто сообщает вам, где этот массив' True'. – hpaulj