Атрибут signature
Атрибут signature класса ufunc
возвращает строку, которая описывает сигнатуру
универсальной функции. Сигнатура определяет,
какое количество входных массивов принимает
функция и сколько массивов она возвращает.
Этот атрибут особенно полезен для функций,
работающих с несколькими входными и выходными
данными.
Синтаксис
ufunc.signature
Атрибут не принимает параметров и возвращает
строку с сигнатурой или None, если
сигнатура не определена.
Пример
Давайте рассмотрим сигнатуру функции add,
которая принимает два массива и возвращает один:
import numpy as np
res = np.add.signature
print(res)
Результат выполнения кода:
None
Функция add не имеет явной сигнатуры,
поэтому атрибут возвращает None.
Пример
Теперь рассмотрим функцию matmul,
которая выполняет матричное умножение и имеет
определённую сигнатуру:
import numpy as np
res = np.matmul.signature
print(res)
Результат выполнения кода:
"(n?,k),(k,m?)->(n?,m?)"
Сигнатура (n?,k),(k,m?)->(n?,m?)
означает, что функция принимает два входных
массива и возвращает один. Буквы n,
k, m обозначают размерности,
а знак вопроса указывает на необязательность
этих размерностей.
Пример
Рассмотрим сигнатуру функции einsum,
которая реализует соглашение Эйнштейна:
import numpy as np
res = np.einsum.signature
print(res)
Результат выполнения кода:
None
Функция einsum не имеет фиксированной
сигнатуры, так как её поведение определяется
переданной строкой подписки, поэтому атрибут
возвращает None.
Пример
Сигнатура позволяет определить количество
входных и выходных массивов для функции
linalg.solve:
import numpy as np
res = np.linalg.solve.signature
print(res)
Результат выполнения кода:
"(...,m,m),(...,m)->(...,m)"
Сигнатура показывает, что функция принимает два входных массива и возвращает один. Многоточие означает, что поддерживаются трансляции для произвольного количества измерений.