tf.searchsorted
| View source on GitHub |
Ищет, куда вставить значение в отсортированную последовательность.
tf.searchsorted(
sorted_sequence,
values,
side='left',
out_type=tf.dtypes.int32,
name=None
)
Это не метод проверки вхождения (как в Python in).
Типичный сценарий использования этой операции — «разбиение на бины», «разбиение на ведра» или «дискретизация». Значения 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' соответствует нижней границе, а 'right' — верхней границе. |
out_type | Тип выходных данных (int32 или int64). По умолчанию tf.int32. |
name | Необязательное имя операции. |
| Возвращаемое значение | |
|---|---|
N-мерный Tensor размера values, содержащий результат применения нижней или верхней границы (в зависимости от стороны) к каждому значению. Результат — не глобальный индекс всего 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/versions/r2.9/api_docs/python/tf/searchsorted