矩阵
- 矩阵中的每一个位置(i,j)的 value 值,都代表了这个矩阵在这一点的值的大小,比如说我们可以用
A
A
A 来表示一个矩阵 arr,然后我们说
A
i
,
j
=
5
A_{i,j} = 5
Ai,j=5 我们想得到这个值的时候,我们需要用索引的方式得到这个值
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
- 我们可以通过 plt 来画出一个矩阵的图,他可以直接作为图片,上面的每一个点的值都可以作为一个 pixel 色度的值
plt.imshow(arr)
meshgrid
- 坐标矩阵,顾名思义,他首先是个矩阵,但是这个矩阵中的每个位置的值都表示一个位置的
x
x
x 值或者
y
y
y 值
- 坐标矩阵并不会用每个点的值来代表这个图上这个 pixel 的值的大小,所以坐标矩阵如果当 image 来进行 imshow 结果会很奇怪
grid_x = np.arange(3)
print(grid_x)
grid_x.shape
[0 1 2]
(3,)
grid_y = np.arange(3)
print(grid_y)
grid_y.shape
[0 1 2]
(3,)
[X,Y] = np.meshgrid(grid_x,grid_y)
print(X)
[[0 1 2]
[0 1 2]
[0 1 2]]
print(Y)
[[0 0 0]
[1 1 1]
[2 2 2]]
for i in range(len(X)):
plt.scatter(X[i],Y[i])
plt.yticks(range(3))
plt.xticks(range(3))
plt.grid(True)
plt.show()
把 meshgrid 的图进行 imshow
- 会很奇怪,因为总是沿着 x 方向不断增大,也总是沿着 y 方向不断增大
fig,(a1,a2) = plt.subplots(1,2,figsize=(8,4))
a1.imshow(X)
a2.imshow(Y)
坐标矩阵进行向量运算
- 正是因为坐标矩阵 X 和 Y 可以联合起来代表整个图上所有点的坐标
- 因此,可以通过坐标矩阵来进行向量的运算
回顾普通矩阵两个点相减的意义
- 对于普通的矩阵 arr ,如果让
A
i
,
j
−
A
p
,
q
=
v
,
v
∈
R
A_{i,j} - A_{p,q} = v, v \in R
Ai,j−Ap,q=v,v∈R,两个矩阵中的点进行相减,只能得到一个具体的数值,没有蕴含任何的坐标信息
坐标矩阵两点相减
i = 2
j = 2
p = 1.5
q = 1
point_ij = (i,j)
mode_ij = np.linalg.norm(point_ij)
mode_pq = np.linalg.norm(point_pq)
point_new = (i-p,j-q)
point_new
(0.5, 1)
- 对于这里产生的
(
2
,
1
)
(2,1)
(2,1) 我们可以当做一个新的点,也可以当做是一个向量
可视化相减的向量
mode = np.linalg.norm(point_new)
mode
1.118033988749895
plt.quiver(0,0,(i-p),(j-q),mode)
plt.colorbar()
'''
下图中的向量使用的是 单位向量 + 颜色深度来表示新的那个向量
'''