np.matrix(np.array([0,0]))和np.matrix([0,0])之间有区别吗?

时间:2019-05-30 04:20:11

标签: python numpy matrix

我正在阅读此genstrings answer,以实现从零开始的线性回归:

# 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是否以某种方式增加了theta的功能?如果将前者替换为后者,最终代码能否正常运行?

谢谢。

2 个答案:

答案 0 :(得分:2)

奇怪的是,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(..))似乎可以避免混乱,尽管更深层次的原因对我来说仍然很神秘。

答案 1 :(得分:1)

您可以查看文档:{​​{3}}

np.matrix的

签名“数据”可以是array_like或字符串,而[0,0]及其对应的numpy.ndarray都足够。