如何使用python生成身份张量?

时间:2019-02-04 09:26:20

标签: python numpy tensorflow identity tensor

我知道np.eye会生成单位矩阵。我的身份矩阵是

  

在线性代数中,大小为n的恒等矩阵(有时有时被称为unit matrix)是n × n方阵,主对角线上有一个,其他地方为零。

我知道我们可以使用Numpynp.identity(3)中创建它。

  

但是,我想知道如何在python中拥有一个身份张量。

我想在张量乘法中使用恒等张量。如下所示:

其中G = Er ×1 U1 ×2 U2 ...×M UM是变换张量,而Er ∈    R r×r×...×r是一个身份张量(对角元素为1,所有其他条目均为0)。我需要具有用于生成identity tensor的代码。

谢谢。

3 个答案:

答案 0 :(得分:1)

使用np.identity代替tf.eye

tf.eye(2)
# [[1., 0.],
#  [0., 1.]]

答案 1 :(得分:1)

可以使用一个函数来完成该函数,如果所有索引都相等,则该函数返回1,但是必须对其进行矢量化处理才能在np.fromfunction中使用

np.fromfunction(np.vectorize(lambda i,j,k: int(i==j==k)), (3,3,3))

输出:

array([[[1, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 1, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 1]]])

答案 2 :(得分:0)

像这样吗?

def nd_id(n, d):
    out = np.zeros( (n,) * d )
    out[ [np.arange(n)] * d ] = 1
    return out

测试

nd_id(3,3)
Out[]: 
array([[[ 1.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  1.]]])