scipy.sparse.coo_array.
tensordot#
- coo_array.tensordot(other, axes=2)[源代码]#
返回与另一个数组沿着给定轴的张量点积。
tensordot 与 dot 和 matmul 的不同之处在于,可以为第一个和第二个数组的每一个选择任意轴,并且计算乘积之和,就像矩阵乘法一样,但不仅仅是第一个的行乘以第二个的列。它取指定轴上的向量集合的点积。在这里,如果需要,我们甚至可以取沿两个或更多轴的乘积之和。因此,tensordot 是应用于任何维度 >= 1 的数组的点积计算。它类似于 matmul,但是对每个矩阵的任意轴进行运算。
给定两个张量 a 和 b,以及所需的轴指定为包含两个轴序号序列的 2 元组/列表/数组
(a_axes, b_axes)
,将 a 和 b 的元素(分量)的乘积在由a_axes
和b_axes
指定的轴上求和。axes 输入可以是一个非负整数N
;如果是,则将 a 的最后N
个维度和 b 的前N
个维度相加。- 参数:
- a, barray_like
要进行“点积”运算的张量。
- axesint 或 (2,) array_like
integer_like 如果是整数 N,则按顺序对 a 的最后 N 个轴和 b 的前 N 个轴求和。对应轴的大小必须匹配。
(2,) array_like 一个 2 元组,包含要进行求和的轴的序列,第一个应用于 a,第二个应用于 b。序列的长度必须相同。a 和 b 之间对应轴的形状必须匹配。
- 返回:
- outputcoo_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]])