2
votes

Comment générer un tenseur d'identité avec python?

Je connais np.eye qui génère une matrice d'identité. Je veux dire la matrice d'identité comme

En algèbre linéaire, la matrice identité, ou parfois appelée de manière ambiguë matrice unitaire , de taille n est la matrice carrée n × n avec des uns sur la diagonale principale et des zéros ailleurs.

Et je sais que nous pouvons le créer dans Numpy avec np.identity (3) .

Mais j'aimerais savoir comment puis-je avoir un Tensor d'identité en python.

Je voudrais utiliser le tenseur d'identité dans la multiplication des tenseurs. Comme ci-dessous:

G = Er × 1 U1 × 2 U2 ... × M UM est un tenseur de transformation, et Er ∈ R r × r × ... × r est un tenseur d'identité (les éléments diagonaux sont 1, et toutes les autres entrées sont 0). J'ai besoin du code pour générer le tenseur d'identité .

Merci d'avance.


1 commentaires

Quelle est la forme souhaitée?


3 Réponses :


2
votes

Au lieu de np.identity , utilisez tf.eye:

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


0 commentaires

1
votes

Quelque chose comme ça?

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

Test

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


2 commentaires

Merci de votre aide. Je veux savoir comment puis-je calculer la covariance des tenseurs en python? est-ce la même chose avec les matrices?


Poser une autre question



1
votes

Cela peut être fait avec une fonction qui en renvoie un si tous les indices sont égaux, mais elle doit être vectorisée pour être utilisée dans np.fromfunction

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

Sortie:

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


0 commentaires