tensordot#
- coo_matrix.tensordot(other, оси=2)[источник]#
Возвращает тензорное произведение с другим массивом вдоль заданных осей.
Tensordot отличается от dot и matmul тем, что любая ось может быть выбрана для каждого из первого и второго массивов, и сумма произведений вычисляется так же, как для матричного умножения, только не только для строк первого на столбцы второго. Он берет скалярное произведение коллекции векторов вдоль указанных осей. Здесь мы можем даже взять сумму произведений вдоль двух или даже более осей, если это необходимо. Таким образом, tensordot - это вычисление скалярного произведения, примененное к массивам любой размерности >= 1. Это похоже на matmul, но по произвольным осям для каждой матрицы.
Даны два тензора, a и b, и желаемые оси, указанные как 2-кортеж/список/массив, содержащий две последовательности номеров осей,
(a_axes, b_axes), суммировать произведения aи bэлементов (компонентов) по осям, указаннымa_axesиb_axes. оси вход может быть одним неотрицательным целым числом,N; если это так, то последнийNизмерения a и первыйNизмерения b суммируются.- Параметры:
- a, barray_like
Тензоры для «скалярного произведения».
- осиint или (2,) array_like
integer_like Если int N, суммирование по последним N осям a и первые N осей b по порядку. Размеры соответствующих осей должны совпадать.
(2,) array_like Кортеж из двух последовательностей осей, по которым выполняется суммирование, первая применяется к a, второй к b. Последовательности должны быть одинаковой длины. Форма соответствующих осей должна совпадать между a и b.
- Возвращает:
- выводcoo_array
Тензорное скалярное произведение этого массива с other. Он будет плотным/разреженным, если other является плотным/разреженным.
Смотрите также
Примеры
>>> import numpy as np >>> import scipy.sparse >>> A = scipy.sparse.coo_array([[[2, 3], [0, 0]], [[0, 1], [0, 5]]]) >>> A.shape (2, 2, 2)
Целочисленные оси N являются сокращением для (range(-N, 0), range(0, N)):
>>> A.tensordot(A, axes=1).toarray() array([[[[ 4, 9], [ 0, 15]], [[ 0, 0], [ 0, 0]]], [[[ 0, 1], [ 0, 5]], [[ 0, 5], [ 0, 25]]]]) >>> A.tensordot(A, axes=2).toarray() array([[ 4, 6], [ 0, 25]]) >>> A.tensordot(A, axes=3) array(39)
Использование кортежа для осей:
>>> a = scipy.sparse.coo_array(np.arange(60).reshape(3,4,5)) >>> b = np.arange(24).reshape(4,3,2) >>> c = a.tensordot(b, axes=([1,0],[0,1])) >>> c.shape (5, 2) >>> c array([[4400, 4730], [4532, 4874], [4664, 5018], [4796, 5162], [4928, 5306]])