#辨析numpy中flatten,ravel以及A1的区别-----展平
import numpy as np
x = np.matrix([[1,2],[3,4]])
x
matrix([[1, 2],
[3, 4]])
y = x.A #先将x转化为array类型
y
array([[1, 2],
[3, 4]])
#对matrix类型进行展平为一维数组
x.flatten()
matrix([[1, 2, 3, 4]])
x.ravel()
matrix([[1, 2, 3, 4]])
x.A1
array([1, 2, 3, 4])
x[:,1].A1
array([2, 4])
通过以上三个函数的展平发现,flatten以及ravel有展平的作用,但是对与matrix类型,我们发现,flatten和ravel将矩阵展平之后,依保持了矩阵类型以及原来的维数,但是A1直接将其展平为了一维数组
y.flatten()
array([1, 2, 3, 4])
y.ravel()
array([1, 2, 3, 4])
y.A1
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-9-8765518c9c68> in <module>
----> 1 y.A1
AttributeError: 'numpy.ndarray' object has no attribute 'A1'
通过以上三个函数的展平发现,对于array类型,flatten和ravel可以直接将array多维数组展平为一维数组,但是array并没有A1命令
总结:flatten(),以及ravel()对于array直接展平为一维数组,对于matrix展平的同 时保留原有维数和类型
A1命令只针对matrix类型,直接展平为一维数组,而不是一维矩阵(也没有一维矩阵233)
ps:多说一句,即使是对array类型的展平,flatten()和ravel()的效果是完全相同的,但机理不同,ravel的展平是一种引用,flatten则是深拷贝