Есть ли разница между np.matrix(np.array([0,0])) и np.matrix([0,0])?

Я читал этот код для реализации линейной регрессии с нуля:

# convert from data frames to numpy matrices
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))

Когда я наткнулся на эту строку:

np.matrix(np.array([0,0]))

Мне было интересно, почему человек просто не написал np.matrix([0,0]).

Я запустил оба в блокноте jupyter и получил тот же результат:

theta = np.matrix([0,0])
theta2 = np.matrix(np.array([0,0]))
print(theta,theta2,type(theta),type(theta2))

Выход:[[0 0]] [[0 0]] <class 'numpy.matrix'> <class 'numpy.matrix'>

Есть ли разница между ними? Добавляет ли дополнительная np.array часть функциональности тета? Будет ли окончательный код работать правильно, если я заменю первый вторым?

Это было написано в 2014 году. Теперь у np.matrix есть PendingDepricationWarning. Я ожидаю, что автор демо просто использовал стиль кодирования, к которому он привык, без тонкой настройки от группы читателей SO.

hpaulj 30.05.2019 07:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
221
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете проверить документация:

Подпись «данные» np.matrix может быть либо array_like, либо строкой, при этом достаточно как [0,0], так и соответствующего numpy.ndarray аналога.

Ответ принят как подходящий

Как ни странно, matrix(array([0,0])) создает чистый объект, которому принадлежат его данные.

>>> np.matrix(np.array([0,0])).flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
>>> np.matrix(np.array([0,0])).base

тогда как matrix([0,0]) кажется представлением анонимного массива.

>>> np.matrix([0,0]).flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
>>> np.matrix([0,0]).base
array([0, 0])

Таким образом, дополнительное array в matrix(array(..)), кажется, позволяет избежать беспорядка, хотя более глубокие причины этого остаются для меня загадочными.

np.matrix имеет параметр copy=True, np.asmatrix имеет значение False по умолчанию. matrix.__new__ возвращает ввод ndarray в соответствии с этой копией (вместе с окончательной настройкой формы). Другой data прошел через np.array(data, ...), за которым последовал звонок ndarray.__new__. Подробнее см. в коде numpy/matrixlib/defmatrix.py.
hpaulj 30.05.2019 07:52

По сути, оба используют np.array, чтобы превратить список в массив. Остальное просто приводит этот массив в подкласс matrix. Начиная с большого списка, я не вижу существенных различий во времени (даже по сравнению с обычным np.array(alist).). Мы также можем использовать `arr.view(np.matrix)``.

hpaulj 30.05.2019 18:31

Другие вопросы по теме