Numpy的tile函数

1.函数的定义与说明

tile函数是模板numpy.lib.shape_base中的函数。

函数的形式是tile(A,reps)

函数参数说明中提到A和reps都是array_like的,什么是array_like的parameter呢?在网上查了一下,始终搞不明白,便把熟悉的python数据类型都试了一下,得出以下结论。

A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类型。

reps的类型也很多,可以是tuple,list, dict, array, int,bool.但不可以是float, string, matrix类型。

假定A的维度为d,reps的长度为len

当d>=len时,将reps长度补足为d,即在reps前面加上d-len个1。

这里的意思是,假设A为k维数组,每一维都有一定长度,构成的向量为D。


而长度为len的reps有len个数,进行tile函数运算时补足d位,前面加d-len个1,如下图所示:


经过tile运算,生成新的A,A的各维维度为:

其中相乘的意思为,将原来A中每一维度的元素进行copy,生成的A中此元素出现次数为新的reps对应维度的数目。操作从低维度向高维进行。

当d

2.函数操作示例

首先给几个示例:

>>> tile(1.3,2)

array([ 1.3,  1.3])

array([1, 2, 1, 2, 1, 2])

>>> tile((1,2,3),2)

array([1, 2, 3, 1, 2, 3])

>>> a=[[1,2,3],[4,5,5]]

>>> tile(a,2)

array([[1, 2, 3, 1, 2, 3],

[4, 5, 5, 4, 5, 5]])

>>> tile([1,2,3],[2,2,2,2])

array([[[[1, 2, 3, 1, 2, 3],

[1, 2, 3, 1, 2, 3]],

[[1, 2, 3, 1, 2, 3],

[1, 2, 3, 1, 2, 3]]],

[[[1, 2, 3, 1, 2, 3],

[1, 2, 3, 1, 2, 3]],

[[1, 2, 3, 1, 2, 3],

[1, 2, 3, 1, 2, 3]]]])

拿其中一个例子进行说明:

>>> a=[[1,2],[2,3]]

>>> tile(a,2)

array([[1, 2, 1, 2],

[2, 3, 2, 3]])

这里a的维度为2,reps长度为1(仅仅是1个int类型数据)

则将reps长度补足为2,结果为reps = [1,2](这里也可以写成reps=(1,2),都无妨的)

进行copy操作,从低维进行.数组a为a[2][2]

一维copy操作:copy两次。a[0]变为[1,2,1,2],a[1]变为[2,3,2,3]

二维copy操作,copy1次。a变为[[1,2,1,2],[2,3,2,3]]

a数组为a[2][4]

如此则不难理解下面的结果:

>>> tile(a,[1,2])

array([[1, 2, 1, 2],

[2, 3, 2, 3]])

>>> tile(a,[2,2])

array([[1, 2, 1, 2],

[2, 3, 2, 3],

[1, 2, 1, 2],

[2, 3, 2, 3]])

tile(a,[2,2])中是将上述第二步的对a的第二维的copy次数变成了两次,a[0]copy两次,a[1]copy两次:[a[0],a[0],a[1],a[1]]结果如上所示。

3.函数其他注意事项

①当reps为bool类型或者是bool list类型的时候,与int类型相对应,即True对应为1,False对应为0.如:

>>> tile([1,2],[True,False])

array([], shape=(1, 0), dtype=int32)

>>> tile([1,2],[True,True])

array([[1, 2]])

>>> tile([1,2],[True,True,True])

array([[[1, 2]]])

>>> tile([1,2],True)

array([1, 2])

②当reps为dict类型时,实则取的是key值列表,且key值列表为升序排列如下所示:

>>> tile([1,2,3],{1:2,3:4})

array([[1, 2, 3, 1, 2, 3, 1, 2, 3]])

>>> tile([1,2,3],{3:4,1:2})

array([[1, 2, 3, 1, 2, 3, 1, 2, 3]])

>>> a={1:2,3:4}

>>> tile([1,2,3],a.keys())

array([[1, 2, 3, 1, 2, 3, 1, 2, 3]])

③当A为int,string,float,bool,dict等类型的时候,操作大体相似,都是讲A视为一个整体,生成一个与reps的长度相同维度的数组。如下所示:

>>> tile({1:2,3:4,5:6},3)

array([{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}], dtype=object)

>>> tile({1:2,3:4,5:6},[2,2])

array([[{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}],

[{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}]], dtype=object)

>>> tile(‘abc‘,3)

array([‘abc‘, ‘abc‘, ‘abc‘],

dtype=‘|S3‘)

>>> tile(‘abc‘,[3,3])

array([[‘abc‘, ‘abc‘, ‘abc‘],

[‘abc‘, ‘abc‘, ‘abc‘],

[‘abc‘, ‘abc‘, ‘abc‘]],

dtype=‘|S3‘)

>>> tile(2,3)

array([2, 2, 2])

>>> tile(2,[3,3])

array([[2, 2, 2],

[2, 2, 2],

[2, 2, 2]])

不过有所不同的是,当A为string类型以及dict类型的时候,array数组最后多了一个信息,即dtype,原因为何,即便看了一些源码,也不晓得是怎么回事,好像由array到ndarray,一大堆C的东西,搞不明白,索性作罢。另外,当对list类型进行mat操作然后作为参数A传入tile时也可以,不过结果类型不是array类型,而是matrix类型了,原因几何,我也无法解答。

看了tile的源码以后以上内容差不多都可以理解。例如之所以reps的类型有限制,在于代码一开始对reps进行了以下操作:

tuple(reps),无法进行该操作的reps参数就会报错。而且dict类型的reps进行tuple化以后,key值以升序出现,这也是注意事项中2的原因,而list和tuple类型的数值顺序不变。

大概就是以上了。我对numpy这里了解的不是很多,还希望向内行多多讨教呢,所以有问题不妨留言~

转自http://blog.sina.com.cn/s/blog_6bd0612b0101cr3u.html

时间: 2024-10-09 14:51:03

Numpy的tile函数的相关文章

numpy中tile函数

tile函数位于python模块numpy.lib.shape_base中,他的功能是重复某个数组. 函数的形式是tile(A,reps) 函数参数说明中提到A和reps都是array_like的,什么是array_like的parameter呢?在网上查了一下,始终搞不明白,便把熟悉的python数据类型都试了一下,得出以下结论. A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类

python 科学计算库NumPy—tile函数

在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法.   函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是array_like的参数,A可以是:array,list,tuple,dict,matrix以及基本数据类型int,string,float以及bool类型,reps的类型可以是tuple,list,dict,array,int,bool,但不可以是float,string,matrix类型. 计较常

Numpy中的tile函数用法

0.引言 在看机器学习实战这本书时,遇到numpy.tile(A,B)函数,开始没太明白这个函数用法,网上帖子也不太详细,经过一番试验后基本搞明白基本用法,分享给大家. 1.函数定义 tile函数是模板numpy.lib.shape_base中的函数. 函数形式:tile(A,rep) 功能:重复A的各个维度 参数类型: - A: Array类的都可以 - rep:A沿着各个维度重复的次数,从低维向高维重复 -A的类型众多,几乎所有类型都可以:array, list, tuple, dict,

python的tile函数

1.函数的定义与说明 tile函数位于python模块 numpy.lib.shape_base中,功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组. 2.函数操作示例 (1)先来引入numpy下的所有方法 (2)我们创建一个a,如图下图,使用tile来创建b,注意看b的数据结构 (3)假如我们输入一个元组(1,2),我们会得到一样的结果,与上面相同的b (4)当然,我们想要a变为一个二维数组,就要换一种重复的方式了.

python tile函数用法

tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题: 先来引入numpy下的所有方法: >>> from numpy import * 我们创建一个a,如图下图,使用tile来创建b,注意看b的数据结构: >>> a=[0,1,2]>>> b=tile(a,2)>>> barray([0

Python-Numpy函数-tile函数

tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题: 先来引入numpy下的所有方法 我们创建一个a,如图下图,使用tile来创建b,注意看b的数据结构 假如我们输入一个元组(1,2),我们会得到一样的结果,与上面相同的b 当然,我们想要a变为一个二维数组,就要换一种重复的方式了. b = tile(a,(m,n)):即是把a数组里面的元素复制n次

Numpy 中tile(A, reps)方法

官方文档: 个人理解: 返回值 ndarray,该函数是通过reps重复A后得到一个多位数组, 有点绕... 参数 A几乎可以是全体类型, array, list , tuple, dict, matrix, int, long ,str, bool 等等 reps,类型也很多, array, tuple, list, dict ,int ,long, bool 但是不管怎样都必须是 "一维数组(不一定是数组, 这里说成类一维数组)" , 如[1,2,3,4] , (1,2,3)或 3

为什么你用不好Numpy的random函数?

为什么你用不好Numpy的random函数? 在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学习下. import numpy as np 1 numpy.random.rand() numpy.random.rand(d0,d1,…,dn) rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表格每个维度 返回值为指定维度的array np.random.rand(4,

numpy 常用工具函数 —— np.bincount/np.average

numpy 常用工具函数 -- np.bincount/np.average numpy 常用api(一) numpy 常用api(二) 一个函数提供 random_state 的关键字参数(keyword parameter):是为了结果的可再现性(reoccurrence)或叫可重复性. 1. np.bincount():统计次数 接口为: numpy.bincount(x, weights=None, minlength=None) 1 尤其适用于计算数据集的标签列(y_train)的分布