我正在阅读此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的功能?如果将前者替换为后者,最终代码能否正常运行?
谢谢。
答案 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
都足够。