Есть ли разница между np.matrix (np.array ([0,0])) и np.matrix ([0,0])? - PullRequest
2 голосов
/ 30 мая 2019

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

# 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 какая-либо часть к функционалу тета?Будет ли окончательный код работать правильно, если я заменю первый на второй?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Как ни странно, 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])

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

1 голос
/ 30 мая 2019

Вы можете проверить документацию: https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html

сигнатура "data" np.matrix может быть либо array_like, либо string, тогда как достаточно [0,0] и соответствующего ему numpy.ndarray аналога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...