tf.experimental.RowPartition
Разбиение последовательности значений на смежные подпоследовательности («строки»).
tf.experimental.RowPartition(
row_splits,
row_lengths=None,
value_rowids=None,
nrows=None,
uniform_row_length=None,
nvals=None,
internal=False
)
Используется в блокнотах
| Используется в руководстве |
|---|
Объект RowPartition описывает, как последовательность из nvals элементов следует разделить на nrows смежных подпоследовательностей («строк»). Например, RowPartition можно использовать для разбиения вектора [1, 2, 3, 4, 5] на подпоследовательности [[1, 2], [3], [], [4, 5]]. Обратите внимание, что RowPartition хранит информацию о способе разбиения значений, но не содержит сами разделённые значения. tf.RaggedTensor используется для объединения тензора values с одним или несколькими объектами RowPartition, обеспечивая полное представление разреженного тензора (то есть тензора с измерениями переменной длины).
Объекты RowPartition можно определить с помощью нескольких разных схем:
row_lengths: целочисленный вектор с формой[nrows], задающий длину каждой строки.row_splits: целочисленный вектор с формой[nrows+1], задающий «точки разделения» между строками.row_starts: целочисленный вектор с формой[nrows], задающий начальное смещение каждой строки. Эквивалентноrow_splits[:-1].row_limits: целочисленный вектор с формой[nrows], задающий конечное смещение каждой строки. Эквивалентноrow_splits[1:].value_rowids— целочисленный вектор с формой[nvals], соответствующий значениям последовательности один к одному и задающий строку, к которой относится каждое значение. Если разбиение содержит пустые строки в конце, необходимо также указатьnrows.uniform_row_length— целочисленный скаляр, задающий длину каждой строки. Эту схему можно использовать, только если все строки имеют одинаковую длину.
Например, следующие объекты RowPartition представляют разбиение 8 значений на 5 подсписков следующим образом: [[*, *, *, *], [], [*, *, *], [*], []].
p1 = RowPartition.from_row_lengths([4, 0, 3, 1, 0]) p2 = RowPartition.from_row_splits([0, 4, 4, 7, 8, 8]) p3 = RowPartition.from_row_starts([0, 4, 4, 7, 8], nvals=8) p4 = RowPartition.from_row_limits([4, 4, 7, 8, 8]) p5 = RowPartition.from_value_rowids([0, 0, 0, 0, 2, 2, 2, 3], nrows=5)
Подробнее о каждой схеме см. в документации к соответствующему фабричному методу. Дополнительные примеры см. в документации по tf.RaggedTensor.
Предварительно вычисленные кодировки
Объект RowPartition всегда хранит как минимум одну кодировку разбиения, но его также можно настроить для кэширования дополнительных кодировок. Это позволяет избежать ненужных повторных вычислений в eager-режиме. (В режиме графа оптимизации, такие как устранение общих подвыражений, обычно предотвращают эти ненужные повторные вычисления.) Чтобы проверить, какие кодировки вычислены заранее, используйте RowPartition.has_precomputed_<encoding>. Чтобы кэшировать дополнительную кодировку, используйте RowPartition.with_precomputed_<encoding>.
| Аргументы | |
|---|---|
row_splits | Целочисленный тензор ранга 1 с формой [nrows+1]. |
row_lengths | Целочисленный тензор ранга 1 с формой [nrows] |
value_rowids | Целочисленный тензор ранга 1 с формой [nvals]. |
nrows | Целочисленный скалярный тензор ранга 1. |
uniform_row_length | Скалярный тензор. |
nvals | Скалярный тензор. |
internal | Значение закрытого ключа, необходимое для гарантии, что этот закрытый конструктор вызывается только фабричными методами. |
| Исключения | |
|---|---|
TypeError | Если тензор разбиения строк имеет недопустимый тип данных. |
TypeError | Если не указан ровно один аргумент разбиения строк. |
ValueError | Если тензор разбиения строк имеет недопустимую форму. |
ValueError | Если указано несколько аргументов разбиения. |
ValueError | Если указан nrows, но value_rowids не равен None. |
| Атрибуты | |
|---|---|
dtype | DType, используемый для кодирования разбиения строк (int32 или int64). |
static_nrows | Количество строк в этом разбиении, если оно известно статически.
self.row_lengths().shape == [self.static_nrows] self.row_starts().shape == [self.static_nrows] self.row_limits().shape == [self.static_nrows] self.row_splits().shape == [self.static_nrows + 1] |
static_nvals | Количество значений в этом разбиении, если оно известно статически.
self.value_rowids().shape == [self.static_vals] |
static_uniform_row_length | Количество значений в каждой строке этого разбиения, если оно известно статически. |
Методы
from_row_lengths
@classmethod
from_row_lengths(
row_lengths, validate=True, dtype=None, dtype_hint=None
)
Создаёт объект RowPartition с разбиением строк по row_lengths.
Этот RowPartition делит последовательность values на строки, задавая длину каждой строки:
partitioned_rows = [[values.pop(0) for _ in range(length)]
for length in row_lengths]
| Аргументы | |
|---|---|
row_lengths | Целочисленный тензор ранга 1 с формой [nrows]. Значения должны быть неотрицательными. |
validate | Если значение равно true, используются проверки-утверждения, чтобы проверить, что аргументы образуют допустимый объект RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если он не указан, тип определяется на основе типа row_lengths, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, если dtype равен None. В некоторых случаях вызывающая сторона может не знать, какой тип данных использовать при преобразовании в тензор, поэтому dtype_hint можно задать как предпочтительный вариант. Если преобразование в dtype_hint невозможно, этот аргумент не влияет на результат. |
| Возвращает | |
|---|---|
Объект RowPartition. |
from_row_limits
@classmethod
from_row_limits(
row_limits, validate=True, dtype=None, dtype_hint=None
)
Создаёт объект RowPartition с разбиением строк по row_limits.
Эквивалентно: from_row_splits(values, concat([0, row_limits], axis=0)).
| Аргументы | |
|---|---|
row_limits | Целочисленный тензор ранга 1 с формой [nrows]. Значения должны быть отсортированы по возрастанию. |
validate | Если значение равно true, используются проверки-утверждения, чтобы проверить, что аргументы образуют допустимый объект RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если он не указан, тип определяется на основе типа row_limits, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, если dtype равен None. В некоторых случаях вызывающая сторона может не знать, какой тип данных использовать при преобразовании в тензор, поэтому dtype_hint можно задать как предпочтительный вариант. Если преобразование в dtype_hint невозможно, этот аргумент не влияет на результат. |
| Возвращает | |
|---|---|
Объект RowPartition. |
from_row_splits
@classmethod
from_row_splits(
row_splits, validate=True, dtype=None, dtype_hint=None
)
Создаёт объект RowPartition с разбиением строк по row_splits.
Этот RowPartition делит последовательность values на строки, указывая, где начинается и заканчивается каждая строка:
partitioned_rows = [] for i in range(len(row_splits) - 1): row_start = row_splits[i] row_end = row_splits[i + 1] partitioned_rows.append(values[row_start:row_end])
| Аргументы | |
|---|---|
row_splits | Целочисленный тензор ранга 1 с формой [nrows+1]. Он не должен быть пустым и должен быть отсортирован по возрастанию. row_splits[0] должен быть равен нулю. |
validate | Если значение равно true, используются проверки-утверждения, чтобы проверить, что аргументы образуют допустимый объект RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если он не указан, тип определяется на основе типа row_splits, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, если dtype равен None. В некоторых случаях вызывающая сторона может не знать, какой тип данных использовать при преобразовании в тензор, поэтому dtype_hint можно задать как предпочтительный вариант. Если преобразование в dtype_hint невозможно, этот аргумент не влияет на результат. |
| Возвращает | |
|---|---|
Объект RowPartition. |
| Исключения | |
|---|---|
ValueError | Если row_splits — пустой список. |
from_row_starts
@classmethod
from_row_starts(
row_starts, nvals, validate=True, dtype=None, dtype_hint=None
)
Создаёт объект RowPartition с разбиением строк по row_starts.
Эквивалентно: from_row_splits(concat([row_starts, nvals], axis=0)).
| Аргументы | |
|---|---|
row_starts | Целочисленный тензор ранга 1 с формой [nrows]. Значения должны быть неотрицательными и отсортированными по возрастанию. Если nrows>0, то row_starts[0] должен быть равен нулю. |
nvals | Скалярный тензор, указывающий количество значений. |
validate | Если значение равно true, используются проверки-утверждения, чтобы проверить, что аргументы образуют допустимый объект RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если он не указан, тип определяется на основе типа row_starts, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, если dtype равен None. В некоторых случаях вызывающая сторона может не знать, какой тип данных использовать при преобразовании в тензор, поэтому dtype_hint можно задать как предпочтительный вариант. Если преобразование в dtype_hint невозможно, этот аргумент не влияет на результат. |
| Возвращает | |
|---|---|
Объект RowPartition. |
from_uniform_row_length
@classmethod
from_uniform_row_length(
uniform_row_length,
nvals=None,
nrows=None,
validate=True,
dtype=None,
dtype_hint=None
)
Создаёт объект RowPartition с разбиением строк по uniform_row_length.
Этот RowPartition делит последовательность values на строки одинаковой длины:
partitioned_rows = [[values.pop(0) for _ in range(uniform_row_length)]
for _ in range(nrows)]
Обратите внимание, что необходимо указать nvals, nrows или оба параметра.
| Аргументы | |
|---|---|
uniform_row_length | Целочисленный скалярный тензор. Значение должно быть неотрицательным. Размер внешней оси values должен делиться на uniform_row_length без остатка. |
nvals | Неотрицательный целочисленный скалярный тензор, задающий количество значений. Его необходимо указать, если nrows не задан. Если параметр не указан, по умолчанию используется uniform_row_length*nrows. |
nrows | Количество строк в созданном объекте RowPartition. Если параметр не указан, по умолчанию используется nvals/uniform_row_length (или 0, если uniform_row_length==0). nrows необходимо указывать только в том случае, если uniform_row_length может быть равен нулю. uniform_row_length*nrows должно быть равно nvals. |
validate | Если значение равно true, используются проверки-утверждения, чтобы проверить, что аргументы образуют допустимый объект RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если он не указан, тип определяется на основе типа uniform_row_length, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, если dtype равен None. В некоторых случаях вызывающая сторона может не знать, какой тип данных использовать при преобразовании в тензор, поэтому dtype_hint можно задать как предпочтительный вариант. Если преобразование в dtype_hint невозможно, этот аргумент не влияет на результат. |
| Возвращает | |
|---|---|
Объект RowPartition. |
from_value_rowids
@classmethod
from_value_rowids(
value_rowids, nrows=None, validate=True, dtype=None, dtype_hint=None
)
Создаёт объект RowPartition с разбиением строк по value_rowids.
Этот RowPartition делит последовательность values на строки, указывая, к какой строке следует добавить каждое значение:
partitioned_rows = [[] for _ in nrows] for (value, rowid) in zip(values, value_rowids): partitioned_rows[rowid].append(value)
| Аргументы | |
|---|---|
value_rowids | Целочисленный тензор ранга 1 с формой [nvals], соответствующий values один к одному и задающий индекс строки для каждого значения. Значения должны быть неотрицательными и отсортированными по возрастанию. |
nrows | Целочисленный скаляр, задающий количество строк. Его следует указать, если объект RowPartition может содержать пустые строки в конце. Значение должно быть больше value_rowids[-1] (или больше либо равно нулю, если value_rowids пуст). По умолчанию используется value_rowids[-1] + 1 (или ноль, если value_rowids пуст). |
validate | Если значение равно true, используются проверки-утверждения, чтобы проверить, что аргументы образуют допустимый объект RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если он не указан, тип определяется на основе типа value_rowids, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, если dtype равен None. В некоторых случаях вызывающая сторона может не знать, какой тип данных использовать при преобразовании в тензор, поэтому dtype_hint можно задать как предпочтительный вариант. Если преобразование в dtype_hint невозможно, этот аргумент не влияет на результат. |
| Возвращает | |
|---|---|
Объект RowPartition. |
| Исключения | |
|---|---|
ValueError | Если nrows несовместим с value_rowids. |
Пример:
print(RowPartition.from_value_rowids(
value_rowids=[0, 0, 0, 0, 2, 2, 2, 3],
nrows=4))
tf.RowPartition(row_splits=[0 4 4 7 8])is_uniform
is_uniform()
Возвращает true, если статически известно, что разбиение является равномерным.
Это определяется наличием self._uniform_row_length. Например: RowPartition.from_row_lengths([3,3,3]).is_uniform()false RowPartition.from_uniform_row_length(5, nvals=20).is_uniform()true RowPartition.from_row_lengths([2,0,2]).is_uniform()==false
| Возвращает | |
|---|---|
| Является ли RowPartition статически равномерным. |
nrows
nrows()
Возвращает количество строк, созданных этим объектом RowPartition.
| Возвращает | |
|---|---|
| скалярный целочисленный Tensor |
nvals
nvals()
Возвращает количество значений, разбитых на части этим объектом RowPartition.
Если последовательность, разбитая этим объектом RowPartition, является тензором, то nvals — это размер самого внешнего измерения этого тензора, то есть nvals == values.shape[0].
| Возвращает | |
|---|---|
| скалярный целочисленный Tensor |
offsets_in_rows
offsets_in_rows()
Возвращает смещение каждого значения.
RowPartition принимает массив x и преобразует его в подсписки. offsets[i] — это индекс x[i] в соответствующем подсписке. Для структуры вида [,,],[,],[],[,*] возвращается: 0,1,2,0,1,0,1
| Возвращает | |
|---|---|
| смещение для каждого значения. |
row_lengths
row_lengths()
Возвращает длины строк в этом объекте RowPartition.
| Возвращает | |
|---|---|
Целочисленный тензор ранга 1 с формой [self.nrows]. Возвращаемый тензор содержит неотрицательные значения. tf.reduce_sum(self.row_lengths) == self.nvals(). |
row_limits
row_limits()
Возвращает индексы границ строк в этом разбиении строк.
Эти индексы указывают, где заканчиваются значения каждой строки. partition.row_limits() равно partition.row_splits()[:-1].
| Возвращает | |
|---|---|
Целочисленный тензор ранга 1 с формой [self.nrows]. Возвращаемый тензор содержит неотрицательные значения, отсортированные по возрастанию. self.row_limits()[-1] == self.nvals(). |
row_splits
row_splits()
Возвращает индексы разделения строк для этого разбиения строк.
row_splits указывает, где начинаются и заканчиваются значения каждой строки. В частности, значения строки i хранятся в срезе values[row_splits[i]:row_splits[i+1]].
| Возвращает | |
|---|---|
Целочисленный тензор ранга 1 Tensor с формой [self.nrows+1]. Возвращаемый тензор не пуст и отсортирован по возрастанию. self.row_splits()[0] == 0. self.row_splits()[-1] == self.nvals(). |
row_starts
row_starts()
Возвращает начальные индексы строк в этом разбиении строк.
Эти индексы указывают, где начинаются значения каждой строки. partition.row_starts() равно partition.row_splits()[:-1].
| Возвращает | |
|---|---|
Целочисленный тензор ранга 1 с формой [self.nrows()]. Возвращаемый тензор содержит неотрицательные значения, отсортированные по возрастанию. self.row_starts()[0] == 0. self.row_starts()[-1] <= self.nvals(). |
uniform_row_length
uniform_row_length()
Возвращает длину каждой строки в этом разбиении, если строки равномерны.
Если все строки в этом объекте RowPartition имеют одинаковую длину, этот метод возвращает эту длину в виде скалярного целочисленного Tensor. В противном случае он возвращает None.
| Возвращает | |
|---|---|
скалярный Tensor с type=self.dtype или None. |
value_rowids
value_rowids()
Возвращает индексы строк для этого разбиения строк.
value_rowids задаёт индекс строки для каждого значения. В частности, value_rowids[i] — это индекс строки для values[i].
| Возвращает | |
|---|---|
Целочисленный тензор ранга 1 Tensor с формой [self.nvals()]. Возвращаемый тензор содержит неотрицательные значения, отсортированные по возрастанию. |
with_dtype
with_dtype(
dtype
)
Возвращает копию этого объекта RowPartition с указанным типом данных кодировки.
| Аргументы | |
|---|---|
dtype | Тип данных для кодирующих тензоров, таких как row_splits и nrows. Один из вариантов: tf.int32 или tf.int64. |
| Возвращает | |
|---|---|
| Копию этого объекта RowPartition, в которой кодирующие тензоры приведены к указанному типу. |
© 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/experimental/RowPartition