n 维数组线性变换
看完之后,掌握以下知识:
- 理解 一维,二维,n维数组在numpy中的不同;
- 学会使用线性代数相关知识对n维数组操作而不是使用for-loops;
- 理解n维数组的轴和形状变换。
matrix decomposition(矩阵分解)
Singular Value Decomposition(单值分解): 产生一个压缩的图像近似值
from scipy import misc
img = misc.face() # 使用scipy.misc 中的 face image
img is a Numpy array,as we can see when using the type function
img 是一个numpy的数组,可以使用type这个函数查看
type(img)
# 输出 numpy.ndarray
我们可以使用matplotlib.pyplot.imshow
函数和特殊的iPython命令–%matplotlib inline
来显示内嵌式图画。
import matplotlib.pyplot as plt
%matplotlob inline
# or
plt.imshow(img)
plt.show()
形状、轴和数组属性
NOTE THAT!!! 在线性代数中,向量的维数是指数组中的条目数。在NumPy中,它反而定义了轴的数量。例如,一维数组是一个矢量,如[1, 2, 3],二维数组是一个矩阵,以此类推
- 首先,我们需要确定上面图像的shape。根据图像是个矩形我们可以猜测是二维的,或许可以用二维的array(矩阵)去表示这个图像,但是使用
shape
这个属性,可以看到不一样的答案。
img.shape
# 输出 (768,1024,3)
这个输出是一个包含三个元素的元组,代表这是一个三维的array。从上图可知,这是一个有色彩的图像,可以使用imread
函数去查看它,这个数据是由三个二维的矩阵组合起来的。三维代表的是颜色的通道(RGB-red,green,blue)
总之:三个矩阵,每个矩阵shape是768 * 1024
使用ndim
属性可以查看维度
img.ndim
# 输出 3
NumPy将每个维度称为一个轴 由于imread
的工作方式,第三轴的第一个索引是我们图像的红色像素数据。我们可以通过使用以下语法来访问它
img[:,:,0]
array([[121, 138, 153, ..., 119, 131, 139],
[ 89, 110, 130, ..., 118, 134, 146],
[ 73, 94, 115, ...