scipy.sparse.coo_array.

tensordot#

coo_array.tensordot(other, axes=2)[source]#

返回与另一个数组沿给定轴的张量点积。

tensordot 与 dot 和 matmul 的不同之处在于,可以为第一个和第二个数组中的每一个选择任意轴,并且计算乘积之和,就像矩阵乘法一样,只是不是第一个的行乘以第二个的列。它获取沿指定轴的向量集合的点积。在这里,如果需要,我们甚至可以取沿两个或更多轴的乘积之和。因此,tensordot 是应用于任何维度 >= 1 的数组的点积计算。它类似于 matmul,但对于每个矩阵的任意轴。

给定两个张量,ab,以及所需的轴,指定为一个包含两个轴号序列的 2 元组/列表/数组,(a_axes, b_axes),对 ab 的元素(分量)在 a_axesb_axes 指定的轴上求乘积之和。axes 输入可以是单个非负整数,N;如果是,则对 a 的最后 N 个维度和 b 的前 N 个维度求和。

参数:
a, barray_like

要“点积”的张量。

axesint 或 (2,) array_like
  • integer_like 如果为 int N,则按顺序对 a 的最后 N 个轴和 b 的前 N 个轴求和。相应轴的大小必须匹配。

  • (2,) array_like 一个 2 元组,其中包含要相加的轴的序列,第一个应用于 a,第二个应用于 b。序列的长度必须相同。 ab 之间相应轴的形状必须匹配。

返回值:
outputcoo_array

此数组与 other 的张量点积。如果 other 是密集的/稀疏的,它将是密集的/稀疏的。

参见

dot

示例

>>> 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]])