以下代码可实现
- 矩阵中任意位置元素的取值
- 数组和矩阵中取值的区别
- 如何将矩阵中某行数据转换成易于在matplotlib上画的数据
- np.array([1,2]) 和 np.array([[1,2]])的区别
代码核心知识点
1.
a[row,column]: row:表示矩阵中的行,column:表示列
其中
row=[row_1,row_2], column=[column_1,column_2]
如 a[[0,1],[1]]:表示取0,1行中的第1列
****注意***a[[0,1],[1,2]]:不是表示0,1行中的第1,2列,具体看下**详细举例**
2.
a[:,1]:表示取a中所有行的第1列的数值<class 'numpy.int32'>
a[:,[1]]:取出的是矩阵形式,便于矩阵运算<class 'numpy.ndarray'>
a[:,:-1]:最后一列不取
详细举例
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])#a,b长的一样
b=np.mat([[1,2,3],[4,5,6],[7,8,9]])
#1.取一个元素时,数组和矩阵返回值一样
a1=a[1,1]
#2.取一列,数组和矩阵返回值不同
a2=a[:,2]
b2=b[:,2]
#3.取4个角(0,2行的0,2列),数组和矩阵返回值一样
a3=a[[0,2]]
a33=a3[:,[0,2]]#先取0,1行,再取0,1列. 直接一起写行列是错误的如:a3=a[[0,1],[0,1]]
b3=b[[0,2]]
b33=b3[:,[0,2]]
print("创建a矩阵:\n",a)
print("取一个元素:\n",a1)
print("数组取一列:\n",a2)
print("矩阵取一列:\n",b2)
print("数组取四个角:\n",a33)
print("矩阵取四个角:\n",b33)
#4.数组取一列:[3 6 9],可以直接用于matplotlib上画图,mat取一列:a=[[3] [6] [9]]],不用于matplotlib上画图,so
b4=b2.flatten()
print("将列展平:\n",b4)
b44=b2.flatten().A[0]
print('便于在matplotlib上读取数据:\n',b44)
创建a矩阵:
[[1 2 3]
[4 5 6]
[7 8 9]]
取一个元素:
5
数组取一列:
[3 6 9]
矩阵取一列:
[[3]
[6]
[9]]
数组取四个角:
[[1 3]
[7 9]]
矩阵取四个角:
[[1 3]
[7 9]]
将列展平
[[3 6 9]]
便于在matplotlib上读取数据
[3 6 9]
从mat中拿出数据供matplotlib用
只有[1,2,3]是可直接在matplotlib上使用的,[[1,2,3]]是不可以的,so
import numpy as np
a=np.mat([[1,2,3]])
print(a)
print(a[0])这个方法失效的
print(a.getA()[0])#法1,2只能用于mat,要想提取array的参数,可用上述方法
print(a.flatten.A[0])#法2,
[[1 2 3]]
[[1 2 3]]
[1 2 3]
[1 2 3]
np.array([1,2]) 和 np.array([[1,2]])的区别
一维数组与矩阵相乘,结果仍然是一维数组。相乘原则与矩阵乘法原则相同,
但是一维数组不能转置,在进行矩阵之间的计算时会出现问题,所以要规范书写,一劳永逸
import numpy as np
a=np.array([1,2])
b=np.array([[1,2]])
c=np.array([[4,5],[2,3]])
print(type(a),a.shape)#可以看出a只有一个元素,为一维数组,b的shape有两个元素,因此是二维数组
print(type(b),b.shape)
#使用时出现的问题
print(np.dot(a,c))
print(np.dot(b,c))
print((np.dot(a,c)).T)#不能转置
print((np.dot(b,c).T))
#输出
<class 'numpy.ndarray'> (2,)
<class 'numpy.ndarray'> (1, 2)
[ 8 11]
[[ 8 11]]
[ 8 11]
[[ 8]
[11]]
对matplotlib感兴趣的可看
matplotlib绘制多个子图(汉字标题,XY轴标签)& PIL.Image 11行读取文件夹中照片
总结
-
为了方便矩阵的数据在matplotlib上显示,最开始时,将矩阵a变成数组,np.array(a)再进行取元素操作,array取元素简单。
-
规范矩阵写法,不要写成一维数组形式。
-
对于两维的tensor向量a.shape=torch.Size([55, 55])是直接可以plt.imshow(a)画出来的
碰巧,如果你看到了这篇文章,并且觉得有用的话 那就给个三连吧!