Почему numpy.copy nympy.matrix не действует как исходная матрица? Умножение с транспонированием этой копии не работает

Мне нужно работать с копиями матриц внутри функций. Но копия матрицы (nx 1) (вектор) не ведет себя так, как должна. Здесь я привел пример: транспонирование x, умноженное на y, дает мне нормальное векторное умножение с результатом (1×1) -матрицы. Копии a и b из x и y этого не сделают. Они возвращают массив с размером (nxn). Что я здесь делаю неправильно? И как я мог избежать этого?

>>>import numpy as np >>>x=np.matrix('1;2;3') >>>y=np.matrix('1;1;-1') >>>xT*y matrix([[0]]) >>>a=np.copy(x) >>>b=np.copy(y) >>>aT*b array([[ 1, 2, 3], [ 1, 2, 3], [-1, -2, -3]]) 

  • Шифрование Python Blowfish
  • Вопрос Sqlite insert не работает с python?
  • Каков самый простой способ заставить matplotlib в OSX работать в виртуальной среде?
  • Как декомпилировать файлы из файла PYZ PyInstaller
  • Установка начального значения автоинкремента SQLAlchemy
  • Использование проверки (предопределенной) проверки подлинности для поиска по сетке с помощью sklearn
  • Python - запуск интерактивного отладчика, когда исключение будет иначе брошено
  • Поля функции Openerp
  • 2 Solutions collect form web for “Почему numpy.copy nympy.matrix не действует как исходная матрица? Умножение с транспонированием этой копии не работает”

    Ваши исходные массивы имеют matrix подкласса. Копия – это класс базового array . Используйте x.copy() , метод копирования, специфичный для класса матрицы, для создания другой матрицы. Тогда операции матричного умножения будут работать по-прежнему.

     In [52]: x=np.matrix('1;3;3') In [53]: x Out[53]: matrix([[1], [3], [3]]) In [54]: np.copy(x) Out[54]: array([[1], [3], [3]]) In [55]: x.copy() Out[55]: matrix([[1], [3], [3]]) 

    Решение, предложенное в другом ответе, заключается в замене matrix умножений на эквивалентные для np.array ( np.dot ).

    Если вы хотите скопировать матрицу, вместо использования numpy.copy используйте метод copy в matrix .

     >>> x = np.matrix('1;3;3') >>> x.copy() matrix([[1], [3], [3]]) 

    Другой альтернативой является использование numpy.array(x, copy=True, subok=True) .

    Обратите внимание, что numpy.copy – это просто псевдоним для numpy.array(x, copy=True) , и это приводит к подавлению ввода.

    Python - лучший язык программирования в мире.