Python 之numpy中二维数组与三维数组的切片

    xiaoxiao2022-07-02  103

     

    常见切片类型:

    x[n,:]、x[:,n]、x[m:n,:]、x[:,m:n]x[n,::]、x[:,n:]、x[::,n]、x[:,:,n]、x[m:n,::]、x[:,m:n:]、x[::,m:n]、x[:,:,m:n]

    1、首先区分数组类型:在中括号中将m:n看做整体的前提之下,二维数组(中括号中有一个冒号),三维数组(中括号中有两个冒号)

    2、需要注意到情况如:通常情况每个维度的操作结束通过逗号分割(n,或m:m,),但如n:或者m:n:表示的是从n或者m:n开始到该维度的最后元素。

    3、在进行切片过程中,可以根据逗号判断切片是如何选取元素的,例如三维数组中基本模式是[个数,行数,列数],所以加入b是一个shape=(3,3,4)的三维数组时

    ,b[1,::]代表了行列全取的情况下,第2个数组(重点是根据逗号索引第一个逗号代表个数,后面::之前无逗号可以整体切片)

     b[:,:, 1]代表了分开取个数、行、列(重点是个数和行之后都有逗号,则分开选取而不是整体切片),分开切片个数,行全选情况下选第二列元素

    补充总结:在numpy的数组中,用逗号分隔的是轴的索引,引号表示该轴下的所有元素,比如说如下数组:

    a = np.array([[[3,4]], [[1,2]],[[5,7]],[[3,7]],[[1,8]]])a.shape=(5, 1, 2) 表示是三个轴,a[;,0]表示第一个轴的所有元素,和第二个轴的第一个元素(注意:当给出的索引号少于数组中的总索引数,则将已给出的索引数按顺序指派到轴上并默认将未写的索引数提取全部内容),细说就是再详细一点,a的全体内容为:[[[3,4]], [[1,2]],[[5,7]],[[3,7]],[[1,8]]]。去掉第一层方括号,其中有五个元素,每个元素为[[3,4]]这样的,所以第一个索引的范围为[0:5]。

    注意:OpenCV函数返回的多维数组和常见的numpy数组的不同之处!(后续跟进补充)  

     

    参考博客: https://blog.csdn.net/zgcr654321/article/details/88015849

                      https://blog.csdn.net/sunny2038/article/details/12889059 

    最新回复(0)