python_numpy_tile(a,(b,c))

来源:互联网 发布:淘宝上怎么买二手货 编辑:程序博客网 时间:2024/05/22 03:27

1.函数的定义与说明
tile函数是模板numpy.lib.shape_base中的函数。
函数的形式是tile(A,reps)
参数说明:A和reps都是array_like的
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。
这里写图片描述

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

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

2.操作示例

>>> tile(1.3,2) #rep=2,水平复制1次array([ 1.3,  1.3])>>> tile((1,2,3),2) #水平复制1次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
进行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类型了,原因几何,我也无法解答。
之所以reps的类型有限制,在于代码一开始对reps进行了以下操作:tuple(reps),无法进行该操作的reps参数就会报错。而且dict类型的reps进行tuple化以后,key值以升序出现,这也是注意事项中2的原因,而list和tuple类型的数值顺序不变。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米nt2手机通话声音小怎么办? 微信退出后重新登录忘记密码怎么办 微退出后再登录忘记密码了怎么办 忘记微信密码又退出微信怎么办 无线网自家密码忘了也连不上怎么办 无线网密码忘了连接不上怎么办 魅蓝手机插口半夜坏了怎么办 魅族手机换屏后出现跳屏怎么办 小米手机微信小程序转发不出怎么办 苹果手机ad码和密码忘了怎么办 魅族手机摔掉无法开机怎么办 魅族音量+电源键直接开机了怎么办 魅蓝2数字锁机了怎么办 苹果5s蓝屏开不了机怎么办 红米pro更新开发版发热卡怎么办 5s手机音量增大键失灵怎么办 眼睛看手机久了模糊应怎么办 华为无线自拍杆连opp手机怎么办 苹果手机进水后自动跳电怎么办 魅族手机返回键不好使怎么办 手机壳是玻璃的摔坏了怎么办 魅族手机进水了开不了机怎么办 打发票机屏忘记了密码怎么办 魅族手机升级显示电量不足怎么办 魅蓝手机的图库没了怎么办 魅蓝5s屏幕碎了怎么办 魅族手机中间的home键失灵怎么办 魅族手机突然关机开不了机了怎么办 魅蓝3s卡顿怎么办视频 魅蓝3s手机太卡怎么办 红米4x外放破音怎么办 魅族手机刷机后内存变小了怎么办 手机用久了内存越来越小怎么办魅族 贴了车膜左右后视镜反光怎么办 贴手机膜时酒精没了怎么办 魅蓝e外屏幕碎了怎么办 贴的手机膜边缘翘起来着怎么办 手机后面贴的膜都是胶怎么办 车漆外面一层保护膜被划开了怎么办 美团骑手gps信号弱时怎么办 华为荣耀4x充电插口坏了怎么办