1 前言
使用切片访问矩阵的部分数据(特别是一行或一列数据)时,通常会出现切片维数怎么在瞎变化,以致于不得不用reshape()强制改变维数。在深度学习中,网络对矩阵维数的要求是非常严格的,往往就是这些看似不起眼的错误,导致整个程序崩溃。
2 numpy中切片
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a[0,0]
c=a[0:2,0]
d=a[0,0:2]
e=a[0:1,0:1]
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
运行结果:
变量空间:
可以看出,使用了冒号“:”就不会降维。比如:b没有使用“:”,变成0维,即数值;c,d只使用一个“:",变成1维,即向量;而e有2个地方使用“:”,仍为矩阵。
如果确实弄不清或担心出错,可以用reshape()进行强制转换,其中-1表示维数待定(=总元素个数/其他维度元素个数),如下:
c=c.reshape(-1,1)
d=d.reshape(1,-1)
print("c=",c)
print("d=",d)
运行结果:
变量空间:
3 list中切片
a=[[1,2,3],[4,5,6],[7,8,9]]
b=a[0][0]
c=a[0:2][0]
d=a[0][0:2]
e=a[0:1][0:1]
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
运行结果:
变量空间:
和numpy中一样,使用了“:”就不会降维。
4 注意事项
- list和numpy访问数据元素有所不同,list是一层一层的从外往里访问,每访问一层加一个“[ ]”,和C语言中的2维数组访问方式差不多,而numpy只用一个“[ ]”,层之间用“,”隔开。
- list中没有reshape()函数,不能改变列表维度,除非使用先转换为numpy数组,调用reshape()函数,再转换为list,如下:
f=np.array(e).reshape(-1,1).tolist()
print("f=",f) # f= [[1], [2], [3]]
变量空间:
- 如果不看变量空间,numpy数组可以通过a.shape属性和np.shape(a)函数查看数组维度,list只能通过len()函数查看列表第一维的维度,如下:
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=[[1,2,3],[4,5,6]]
print("a.shape=",a.shape)
print("np.shape(a)=",np.shape(a))
print("len(a)=",len(a))
print("len(b)=",len(b))
print("len(b[0])=",len(b[0]))
运行结果:
声明:本文转自python中矩阵切片维数微秒变化
标签:python,reshape,维数,np,len,print,微秒,numpy From: https://www.cnblogs.com/zhyan8/p/17232652.html