tf.keras.ops.einsum
Вычисляет соглашение об Эйнштейне для операндов.
tf.keras.ops.einsum(
subscripts, *operands
)
| Аргументы | |
|---|---|
subscripts | Указывает подписи для суммирования в виде списка подписей подстрок, разделённых запятыми. Выполняется неявное (классическое соглашение Эйнштейна) вычисление, если не указан явный индикатор ->, а также подписи подстрок точного выходного формата. |
operands | Операторы для вычисления суммы Эйнштейна. |
| Возвращаемое значение | |
|---|---|
| Вычисление на основе соглашения Эйнштейна. |
Пример:
from keras.src import ops a = ops.arange(25).reshape(5, 5) b = ops.arange(5) c = ops.arange(6).reshape(2, 3)
След матрицы:
ops.einsum("ii", a)
60
ops.einsum(a, [0, 0])
60
ops.trace(a)
60Извлечение диагонали:
ops.einsum("ii -> i", a)
array([ 0, 6, 12, 18, 24])
ops.einsum(a, [0, 0], [0])
array([ 0, 6, 12, 18, 24])
ops.diag(a)
array([ 0, 6, 12, 18, 24])Суммирование по оси:
ops.einsum("ij -> i", a)
array([ 10, 35, 60, 85, 110])
ops.einsum(a, [0, 1], [0])
array([ 10, 35, 60, 85, 110])
ops.sum(a, axis=1)
array([ 10, 35, 60, 85, 110])Для тензоров более высокой размерности суммирование по одной оси можно выполнить с помощью эллипсов:
ops.einsum("...j -> ...", a)
array([ 10, 35, 60, 85, 110])
np.einsum(a, [..., 1], [...])
array([ 10, 35, 60, 85, 110])Вычислить транспонирование матрицы или переупорядочить любое количество осей:
ops.einsum("ji", c)
array([[0, 3],
[1, 4],
[2, 5]])
ops.einsum("ij -> ji", c)
array([[0, 3],
[1, 4],
[2, 5]])
ops.einsum(c, [1, 0])
array([[0, 3],
[1, 4],
[2, 5]])
ops.transpose(c)
array([[0, 3],
[1, 4],
[2, 5]])Умножение матрицы на вектор:
ops.einsum("ij, j", a, b)
array([ 30, 80, 130, 180, 230])
ops.einsum(a, [0, 1], b, [1])
array([ 30, 80, 130, 180, 230])
ops.einsum("...j, j", a, b)
array([ 30, 80, 130, 180, 230])
© 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/keras/ops/einsum