Numpy中的tile方法

来源:互联网 发布:加工贸易方式数据 编辑:程序博客网 时间:2024/05/16 05:56

在讲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的值对相应维度的值进行重复。


>>>from numpy import *>>> a = array([1,2,3])>>>print a.shape(3.)>>>print a.ndim1>>>b = tile(a,2)>>>print b[1 2 3 1 2 3]>>>print b.shape(6,)>>>print b.ndim1>>>c = tile(a,(2,3))>>>print c[[1 2 3 1 2 3 1 2 3] [1 2 3 1 2 3 1 2 3]]>>>print c.shape(2,9)>>>print c.ndim2
由此可以看出,得到的新数组的维度由d和A.ndim的大小决定,shape值由扩充后的A和reps相应维度值的乘积得到。


0 0