Python np.矩阵(np.数组([0,0])和np.矩阵([0,0])之间有区别吗?
我在读这篇文章,是为了从头开始实现线性回归:Python np.矩阵(np.数组([0,0])和np.矩阵([0,0])之间有区别吗?,python,numpy,matrix,Python,Numpy,Matrix,我在读这篇文章,是为了从头开始实现线性回归: # 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笔记本上运行了这两个程序,得到了相同的输
# 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]]
这两者有区别吗?额外的np.array
部分是否以某种方式增加了θ的功能?如果我将前者替换为后者,最终代码是否正常工作?您可以检查:
np.matrix
的签名“data”可以是数组或字符串,而[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
而矩阵([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
似乎避免了混乱,尽管其深层原因对我来说仍然很神秘。np.matrix
具有copy=True
参数,np.asmatrix
具有默认的假拷贝。矩阵。uuu new_uuu
根据此副本返回ndarray
输入(以及最终形状调整)。其他数据
经过np.array(data,…)
之后是ndarray.\uuu new\uuu
调用。查看numpy/matrixlib/defmatrix.py代码了解更多详细信息。实际上,两者都使用np.array
将列表转换为数组。其余的只是将该数组强制转换为矩阵
子类。从一个大的列表开始,我看不到明显的时间差异(甚至与普通的np.array(alist)
相比)。我们还可以使用2014年编写的“arr.view(np.matrix)”。现在np.matrix
有一个悬而未决的警告。我认为演示作者只是使用了他习惯的编码风格,没有从一堆SO读者那里进行微调。