TensorFlow中张量转置操作tf.transpose用法

本文详细介绍了在TensorFlow中如何使用tf.transpose函数对张量进行转置操作,包括其参数说明、返回结果以及多个实例演示,覆盖了不同维度张量的转置处理和复数张量的共轭转置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、环境

TensorFlow API r1.12

CUDA 9.2 V9.2.148

cudnn64_7.dll

Python 3.6.3

Windows 10

二、官方说明

对张量按照指定的排列维度进行转置

tf.transpose(
    a,
    perm=None,
    name='transpose',
    conjugate=False
)

输入:

(1)a:输入张量

(2)perm:输入张量要进行转置操作的维度的排列方式

(3)name:可选参数,转置操作的名称

(4)conjugate:可选参数,布尔类型,如果设置为True,则数学意义上等同于tf.conj(tf.transpose(input))

返回结果:

(1)按照指定维度排列方式转置后的张量

 

三、实例

(1)不设置perm参数值时,perm默认为(n-1, n-2, ..., 2, 1, 0),其中n为输入张量的阶(rank)

>>> x = tf.constant([[1,2,3],[4,5,6]])
>>> with tf.Session() as sess:
...     print(sess.run(tf.transpose(x)))
...     print(sess.run(tf.shape(tf.transpose(x))))
... 
[[1 4]
 [2 5]
 [3 6]]
... 
[3 2]

(2)上例中等同实例(张量x的阶为2,因此perm默认为(2-1,0))

>>> x = tf.constant([[1,2,3],[4,5,6]])
>>> with tf.Session() as sess:
...     print(sess.run(tf.transpose(x,[1,0])))
...     print(sess.run(tf.shape(tf.transpose(x))))
... 
[[1 4]
 [2 5]
 [3 6]]
... 
[3 2]

(3)输入张量为复数的情况,参数conjugate=True时,进行共轭转置操作

>>> real = [[1.0,2.0,3.0],[4.0,5.0,6.0]]
>>> imag = [[1.0,2.0,3.0],[4.0,5.0,6.0]]
>>> complex = tf.complex(real,imag)
>>> with tf.Session() as sess:
...     print(sess.run(complex))
...     print(sess.run(tf.shape(complex)))
...     print(sess.run(tf.transpose(complex)))
...     print(sess.run(tf.shape(tf.transpose(complex))))
...     print(sess.run(tf.transpose(complex,conjugate=True)))
...     print(sess.run(tf.shape(tf.transpose(complex,conjugate=True))))
... 
[[1.+1.j 2.+2.j 3.+3.j]
 [4.+4.j 5.+5.j 6.+6.j]]
... 
[2 3]
... 
[[1.+1.j 4.+4.j]
 [2.+2.j 5.+5.j]
 [3.+3.j 6.+6.j]]
... 
[3 2]
... 
[[1.-1.j 4.-4.j]
 [2.-2.j 5.-5.j]
 [3.-3.j 6.-6.j]]
... 
[3 2]
... 

(4)输入张量的维度大于2时,参数perm起作用更大

直观来讲,这里的参数perm=[0,2,1],控制将原来的维度[0,1,2]后面两列置换位置

>>> x = tf.constant([[[ 1,  2,  3],
...                   [ 4,  5,  6]],
...                  [[ 7,  8,  9],
...                   [10, 11, 12]]])
>>> with tf.Session() as sess:
...     print(sess.run(tf.transpose(x,[0,2,1])))
... 
[[[ 1  4]
  [ 2  5]
  [ 3  6]]

 [[ 7 10]
  [ 8 11]
  [ 9 12]]]

 

### 共轭转置的定义与实现 #### 定义 共轭转置是一种针对复数矩阵的操作,其结果是一个新的矩阵,其中原矩阵的每个元素都被取共轭并按照行列互换的方式重新排列。对于一个 \( m \times n \) 的复数矩阵 \( A \),它的共轭转置记作 \( A^H \) 或者 \( A^\dagger \)[^5]。 如果矩阵中的元素均为实数,则共轭转置退化为普通的转置操作。然而,在处理复数矩阵时,这一额外的共轭运算至关重要,因为它能够保持某些重要的性质,比如厄米特矩阵(Hermitian Matrix)的自伴性。 --- #### 数学表示 假设有一个复数矩阵 \( A = [a_{ij}] \),则其共轭转置 \( A^H \) 可以写成: \[ A^H = [\overline{a}_{ji}] \] 这里,\( a_{ij} \) 是原始矩阵第 \( i \) 行第 \( j \) 列上的元素,而 \( \overline{a}_{ji} \) 是该元素的共轭值位于新矩阵的第 \( j \) 行第 \( i \) 列位置上。 --- #### 编程实现 在 MATLAB 中,可以通过单引号 `'` 来快速完成共轭转置操作。例如给定如下矩阵 \( A \): ```matlab A = [1+2i, 3-4i; 5+6i, 7-8i]; At = A'; disp(At); ``` 上述代码会输出: ``` 1.0000 - 2.0000i 5.0000 - 6.0000i 3.0000 + 4.0000i 7.0000 + 8.0000i ``` 而在 Python 中,可以借助 NumPy 库来实现同样的功能。具体来说,NumPy 提供了 `.T` 属性用于普通转置以及 `.conj().T` 方法组合来进行共轭转置。下面是一段示例代码: ```python import numpy as np A = np.array([[1+2j, 3-4j], [5+6j, 7-8j]]) Ah = A.conj().T print(Ah) ``` 运行此代码将得到相同的结果数组作为 MATLAB 输出的内容[^4]。 --- #### 特殊情况讨论 当仅需执行非共轭版本的简单转置而不考虑任何复数成分时,在 Python 和 MATLAB 中分别有对应的替代方式。例如,在 Python 下可单独调用 `.T`;同样地,在 MATLAB 当中也可以采用 `.'` 符号代替常规意义上的 `'` 运算符。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值