Remplacer une valeur d'une matrice dans sage

Bonsoir
Je vous expose mon souci. Je travaille avec des matrices sur SAGE et à un moment donné, j'ai envie de changer la valeur d'un certain coefficient dans ma matrice mais SAGE me renvoie alors le message d'erreur suivant: "a vector is immutable". En revanche il est toujours possible de modifier la valeur d'une ligne ou d'une colonne, mais ce n'est pas ce que je veux car je travaille avec des matrices très grandes, ce n'est pas pratique.

Exemple. Soit $
A = \left( \begin{array}{cc}
0 & 0 \\
0 & 0 \end{array} \right).
$ J'ai envie de la modifier pour obtenir : $
\tilde{A} = \left( \begin{array}{cc}
1 & 0 \\
0 & 0 \end{array} \right).$
Comment vous coderiez ceci, sachant que je ne veux pas avoir à modifier toute une ligne ou toute une colonne ?
Merci d'avance,
Bonne soirée.

Réponses

  • sage: A = Matrix([[0,0],[0,0]])
    sage: A
    [0 0]
    [0 0]
    sage: A[0,0]=1
    sage: A
    [1 0]
    [0 0]
    sage: A[0][0]=2
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-5-c3b586c9fbbe> in <module>()
    ----> 1 A[Integer(0)][Integer(0)]=Integer(2)
    
    /home/jerome/lib/SageMath/local/lib/python2.7/site-packages/sage/modules/free_module_element.pyx in sage.modules.free_module_element.FreeModuleElement.__setitem__ (build/cythonized/sage/modules/free_module_element.c:13064)()
       1788         """
       1789         if not self._is_mutable:
    -> 1790             raise ValueError("vector is immutable; please change a copy instead (use copy())")
       1791         cdef Py_ssize_t d = self._degree
       1792         cdef Py_ssize_t start, stop, step, slicelength
    
    ValueError: vector is immutable; please change a copy instead (use copy())
    
  • J'ai trouvé ceci comme solution.
    def remplacer_valeur_matrice(A,i,j,x): 
        temp = A[ i].list()[:j] + [x] + A[ i].list()[j+1:]
        A[ i] = temp
        return A
    
  • Voilà le code que je propose :-)98846
  • Bis.
    sage: A = Matrix([[0,0],[0,0]])
    sage: A
    [0 0]
    [0 0]
    sage: A[0,0]=1
    sage: A
    [1 0]
    [0 0]
    
  • Ah oui effectivement, merci ! C'est beaucoup mieux !
Connectez-vous ou Inscrivez-vous pour répondre.