对numpy中shape的深入理解
环境:Windows,Python2.7
一维情况:
>>>importnumpyasnp >>>a=np.array([2,3,33]) >>>a array([2333]) >>>printa [2333] >>>a.shape (3,)
一维情况中array创建的可以看做list(或一维数组),创建时用()和[]都可以,多维也一样,两种方法创建后的输出显示结果也相同,这里使用[]进行创建
输出a的shape会显示一个参数,就是这个list中元素个数
创建时也可以直接使用np.zeros([1]),这样会创建全0的list,或者np.ones([1]),不需要我们输入数据,见下图:
>>>a=np.zeros([1]) >>>b=np.ones([1]) >>>printa [0.] >>>printb [1.]
二维情况:
>>>a=np.array([[2,2,2],[3,3,3]]) >>>printa [[222] [333]] >>>a.shape (2,3)
二维情况中array创建的可以看做二维数组(矩阵),注意创建时需要使用2个[],输出a的shape显示的(2,3)相当于有2行,每行3个数,使用np.ones创建结果如下:
多维情况:
多维情况统一使用np.ones进行创建,先看三维情况:
>>>a=np.ones([1,1,1]) >>>printa [[[1.]]] >>>a=np.ones([1,1,2]) >>>printa [[[1.1.]]] >>>a=np.ones([1,2,1]) >>>printa [[[1.] [1.]]] >>>a=np.ones([2,1,1]) >>>printa [[[1.]] [[1.]]]
从上面的代码可以看出,三维情况创建时后面2个参数可以看做是创建二维数组,第1个参数看做创建的二维数组的个数,所以创建时输入的参数为2,3,2时,就相当于创建了2个3行2列的二维数组,如下:
>>>a=np.ones([2,3,2]) >>>printa [[[1.1.] [1.1.] [1.1.]] [[1.1.] [1.1.] [1.1.]]]
然后看四维情况:
>>>a=np.ones([1,1,1,1]) >>>printa [[[[1.]]]] >>>a=np.ones([1,1,1,2]) >>>printa [[[[1.1.]]]] >>>a=np.ones([1,1,2,1]) >>>printa [[[[1.] [1.]]]] >>>a=np.ones([1,2,1,1]) >>>printa [[[[1.]] [[1.]]]] >>>a=np.ones([2,1,1,1]) >>>printa [[[[1.]]] [[[1.]]]]
从上面代码可以看出:四维时将第一个参数设置为2和第二个参数设置为2时,输出结果中间的空行数量不同,我把它理解成先创建1行1列的二维数组[[1.]],然后按照第2个参数打包这样的二维数组,如果第二个参数是2,则打包2个2维数组变成[[[1.]],[[1.]]](小包),然后按照第1个参数再打包这样的包,如果第一个参数是2,则变成[[[[1.]],[[1.]]],[[[1.]],[[1.]]]](大包),就是下面的结果:
>>>a=np.ones([2,2,1,1]) >>>printa [[[[1.]] [[1.]]] [[[1.]] [[1.]]]]
四维以上的结果也是这么理解~输出中区分参数用空行~
然后来看一下特定输出:
>>>importnumpyasnp >>>m=np.ones([2,3,2,3]) >>>printm [[[[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]]] [[[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]]]] >>>printm[1,:,:,:] [[[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]]] >>>printm[:,1,:,:] [[[1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.]]] >>>printm[:,:,1,:] [[[1.1.1.] [1.1.1.] [1.1.1.]] [[1.1.1.] [1.1.1.] [1.1.1.]]] >>>printm[:,:,:,1] [[[1.1.] [1.1.] [1.1.]] [[1.1.] [1.1.] [1.1.]]]
前面printm很好理解~
然后printm[1,:,:,:],:代表默认值(就是一开始你输入时指定的值),这句代码相当于输出2个包中的第1个包(从0开始计数),这个包里面有3个小包,小包里面是2*3的二维数组,所以结果就是上面的~
然后printm[:,1,:,:],相当于输出2个大包,每个大包输出第1个小包,小包里面是2*3的二维数组
然后printm[:,:,1,:],相当于输出2个大包,每个大包输出3个小包,小包里面是二维数组的第1行
然后printm[:,:,:,1],相当于输出2个大包,每个大包输出3个小包,小包里面是1*2的二维数组
其他结果可以自己去试试~
总结:采用np.array()创建时需要几个维度就要用几个[]括起来,这种创建方式要给定数据;采用np.ones()或np.zeros()创建分别产生全1或全0的数据,用a.shape会输出你创建时的输入,创建时输入了几个维度输出就会用几个[]括起来,shape的返回值是一个元组,里面每个数字表示每一维的长度
以上这篇对numpy中shape的深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。