numpy中的tile方法

在讲tile方法之前,先要讲一下Numpy数组中的几个概念。

在NumPy中,数组这一类又被称为ndarray

1、ndarray.ndim

指数组的维度,即数组轴(axes)的个数,其数量等于秩(rank)。通俗地讲,我们平时印象中的数组就是一维数组,维度为1、轴的个数为1、秩也等于1;最常见的矩阵就是二维数组,维度为2、轴的个数为2(可以理解为由x轴、y轴组成)、秩等于2;我们所知的空间就相当于三维数组,维度为3、轴的个数为3(x、y、z轴)、秩等于3;以此类推。

2、ndarray.shape

按教程的话翻译过来是数组的维度,这样就很容易和ndim的概念混淆。所以可以这样理解,shape的返回值是一个元组,元组的长度就是数组的维数,即ndim。而元组中每个整数分别代表数组在其相应维度(/轴)上的大小。以最常见的矩阵为例,print shape后返回(2,3),说明这是一个2行3列的矩阵。


下面说一下tile函数,其原型如下。

原型:numpy.tile(A,reps)

tile共有2个参数,A指待输入数组,reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组。

假设reps的维度为d,那么新数组的维度为max(d,A.ndim)。下面分三种情况进行讨论:

(1)A.dim < d

则向A中添加新轴扩充A的维度。维度大小可以从shape中看出,一般通过向shape对应的元组中添加1完成对A维度的扩充。扩充完成后,则可根据reps的值对A中相应维度的值进行重复。

例如,一维数组shape为(3,),扩充至2维则shape值为(1,3),扩充至3维则shape值为(1,1,3)

(2)A.dim > d

将reps扩充至与A相同的维度。扩充方法同上,也是向shape对应元组中添1,然后再进行重复。

例如,4维数组A的shape为(2,3,4,5),而reps为(2,2)只有2维,那么就要对reps添维进行扩充,得到(1,1,2,2)

(3)A.dim = d

 不需要扩充,直接按reps的值对相应维度的值进行重复。



  
  
  1. >>> from numpy import *
  2. >>> a = array([ 1, 2, 3])
  3. >>> print a.shape
  4. ( 3.)
  5. >>> print a.ndim
  6. 1
  7. >>>b = tile(a, 2)
  8. >>> print b
  9. [ 1 2 3 1 2 3]
  10. >>> print b.shape
  11. ( 6,)
  12. >>> print b.ndim
  13. 1
  14. >>>c = tile(a,( 2, 3))
  15. >>> print c
  16. [[ 1 2 3 1 2 3 1 2 3]
  17. [ 1 2 3 1 2 3 1 2 3]]
  18. >>> print c.shape
  19. ( 2, 9)
  20. >>> print c.ndim
  21. 2
由此可以看出,得到的新数组的维度由d和A.ndim的大小决定,shape值由扩充后的A和reps相应维度值的乘积得到。


猜你喜欢

转载自blog.csdn.net/weixin_38246633/article/details/85254201