tf.searchsorted
Находит позицию, в которую должно быть вставлено значение в отсортированную последовательность.
tf.searchsorted(
sorted_sequence,
values,
side='left',
out_type=tf.dtypes.int32,
name=None
)
Этот метод не предназначен для проверки принадлежности (как, например, in в Python).
Обычно эта операция используется для разбиения на интервалы, корзины или дискретизации. Значения values распределяются по индексам корзин на основе границ, указанных в sorted_sequence. Эта операция возвращает индекс корзины для каждого значения.
edges = [-1, 3.3, 9.1, 10.0] values = [0.0, 4.1, 12.0] tf.searchsorted(edges, values).numpy() array([1, 2, 4], dtype=int32)
Аргумент side определяет, какой индекс возвращается, если значение точно совпадает с границей:
seq = [0, 3, 9, 10, 10] values = [0, 4, 10] tf.searchsorted(seq, values).numpy() array([0, 2, 3], dtype=int32) tf.searchsorted(seq, values, side="right").numpy() array([1, 2, 5], dtype=int32)
Параметр axis нельзя задать для этой операции. Она всегда выполняется по самой внутренней размерности (axis=-1). Операция может принимать любое количество внешних размерностей. Здесь она применяется к строкам матрицы:
sorted_sequence = [[0., 3., 8., 9., 10.],
[1., 2., 3., 4., 5.]]
values = [[9.8, 2.1, 4.3],
[0.1, 6.6, 4.5, ]]
tf.searchsorted(sorted_sequence, values).numpy()
array([[4, 1, 2],
[0, 5, 4]], dtype=int32)Примечание: Предполагается, чтоsorted_sequenceотсортирован вдоль самой внутренней оси, например, с помощьюtf.sort(..., axis=-1). Если последовательность не отсортирована, ошибка не возникает, а содержимое возвращаемого тензора не определено.
| Аргументы | |
|---|---|
sorted_sequence | N-мерный Tensor, содержащий отсортированную последовательность. |
values | N-мерный Tensor, содержащий искомые значения. |
side | 'left' или 'right'; 'left' соответствует lower_bound, а 'right' — upper_bound. |
out_type | Тип выходных данных (int32 или int64). По умолчанию используется tf.int32. |
name | Необязательное имя операции. |
| Возвращает | |
|---|---|
N-мерный Tensor размером values, содержащий результат применения lower_bound или upper_bound (в зависимости от side) к каждому значению. Результат представляет собой не глобальный индекс во всём Tensor, а индекс в последней размерности. |
| Вызывает исключение | |
|---|---|
ValueError | Если последняя размерность содержит sorted_sequence >= 2^31-1 элементов. Если общий размер values превышает 2^31 - 1 элементов. Если первые N-1 размерностей двух тензоров не совпадают. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/searchsorted