本文简要介绍 python 语言中 numpy.tensordot
的用法。
用法:
numpy.tensordot(a, b, axes=2)
沿指定轴计算张量点积。
给定两个张量,a和b, 和一个包含两个 数组 对象的 数组 对象,
(a_axes, b_axes)
, 将产品相加a'沙b的元素(组件)在指定的轴上a_axes
和b_axes
.第三个参数可以是单个非负 integer_like 标量,N
;如果是这样,那么最后一个N
尺寸a和第一个N
尺寸b被总结了。- a, b: array_like
“dot” 的张量。
- axes: int 或 (2,) 数组
integer_like 如果是int N,则按顺序对 a 的最后 N 个轴和 b 的前 N 个轴求和。相应轴的大小必须匹配。
(2,) 数组 或者,要求和的轴列表,第一个序列适用于 a,第二个适用于 b。两个元素 数组 必须具有相同的长度。
- output: ndarray
输入的张量点积。
参数:
返回:
注意:
axes = 0
: 张量积axes = 1
: 张量点积axes = 2
:(默认)张量双收缩
三个常见的用例是::
当axis为integer_like时,计算顺序为:首先是a中的第-N轴和b中的第0轴,最后是a中的第-1轴和b中的第N轴。
当有多个轴要求和时 - 它们不是 a (b) 的最后(第一个)轴 - 参数轴应该由两个相同长度的序列组成,第一个轴要在第一个给出两个序列,第二个轴,以此类推。
结果的形状由第一个张量的非收缩轴和第二个张量的非收缩轴组成。
例子:
“traditional” 示例:
>>> a = np.arange(60.).reshape(3,4,5) >>> b = np.arange(24.).reshape(4,3,2) >>> c = np.tensordot(a,b, axes=([1,0],[0,1])) >>> c.shape (5, 2) >>> c array([[4400., 4730.], [4532., 4874.], [4664., 5018.], [4796., 5162.], [4928., 5306.]]) >>> # A slower but equivalent way of computing the same... >>> d = np.zeros((5,2)) >>> for i in range(5): ... for j in range(2): ... for k in range(3): ... for n in range(4): ... d[i,j] += a[k,n,i] * b[n,k,j] >>> c == d array([[ True, True], [ True, True], [ True, True], [ True, True], [ True, True]])
利用 + 和 * 重载的扩展示例:
>>> a = np.array(range(1, 9)) >>> a.shape = (2, 2, 2) >>> A = np.array(('a', 'b', 'c', 'd'), dtype=object) >>> A.shape = (2, 2) >>> a; A array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) array([['a', 'b'], ['c', 'd']], dtype=object)
>>> np.tensordot(a, A) # third argument default is 2 for double-contraction array(['abbcccdddd', 'aaaaabbbbbbcccccccdddddddd'], dtype=object)
>>> np.tensordot(a, A, 1) array([[['acc', 'bdd'], ['aaacccc', 'bbbdddd']], [['aaaaacccccc', 'bbbbbdddddd'], ['aaaaaaacccccccc', 'bbbbbbbdddddddd']]], dtype=object)
>>> np.tensordot(a, A, 0) # tensor product (result too long to incl.) array([[[[['a', 'b'], ['c', 'd']], ...
>>> np.tensordot(a, A, (0, 1)) array([[['abbbbb', 'cddddd'], ['aabbbbbb', 'ccdddddd']], [['aaabbbbbbb', 'cccddddddd'], ['aaaabbbbbbbb', 'ccccdddddddd']]], dtype=object)
>>> np.tensordot(a, A, (2, 1)) array([[['abb', 'cdd'], ['aaabbbb', 'cccdddd']], [['aaaaabbbbbb', 'cccccdddddd'], ['aaaaaaabbbbbbbb', 'cccccccdddddddd']]], dtype=object)
>>> np.tensordot(a, A, ((0, 1), (0, 1))) array(['abbbcccccddddddd', 'aabbbbccccccdddddddd'], dtype=object)
>>> np.tensordot(a, A, ((2, 1), (1, 0))) array(['acccbbdddd', 'aaaaacccccccbbbbbbdddddddd'], dtype=object)
相关用法
- Python numpy testing.rundocs用法及代码示例
- Python numpy testing.assert_warns用法及代码示例
- Python numpy testing.assert_array_almost_equal_nulp用法及代码示例
- Python numpy testing.assert_array_less用法及代码示例
- Python numpy testing.assert_raises用法及代码示例
- Python numpy testing.assert_almost_equal用法及代码示例
- Python numpy testing.assert_approx_equal用法及代码示例
- Python numpy testing.assert_allclose用法及代码示例
- Python numpy testing.decorators.slow用法及代码示例
- Python numpy testing.suppress_warnings用法及代码示例
- Python numpy testing.assert_string_equal用法及代码示例
- Python numpy testing.run_module_suite用法及代码示例
- Python numpy testing.assert_array_max_ulp用法及代码示例
- Python numpy testing.assert_equal用法及代码示例
- Python numpy testing.assert_array_equal用法及代码示例
- Python numpy testing.assert_array_almost_equal用法及代码示例
- Python numpy testing.decorators.setastest用法及代码示例
- Python numpy trim_zeros用法及代码示例
- Python numpy trace用法及代码示例
- Python numpy tri用法及代码示例
- Python numpy true_divide用法及代码示例
- Python numpy transpose用法及代码示例
- Python numpy tile用法及代码示例
- Python numpy tanh用法及代码示例
- Python numpy trapz用法及代码示例
注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.tensordot。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。