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类型的数值顺序不变。
- python_numpy_tile(a,(b,c))
- (a^b)%c和(a/b)%c
- SQL a>b?a:b, b>c?b:c
- A^B mod C
- A^B%C
- A^B mod C
- c = ( (++a) + (b++) );
- A+B+C
- a^b%c
- a+++b+c+++d++
- A^B mod C
- A=B+C
- A+B和C
- 计算(a/b)%c
- A+B和C
- 1. A+B+C
- 1420 (A^B)%C
- A + B + C Problem
- Java 中的 this 和 super
- 前端 根据某个时间获得它的时间戳,并实现某个时间段内倒现在时间的倒计时功能
- mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理
- Unity中C#实现Excel存取
- 使用ControllerClassNameHandlerMapping+MultiActionController实现零配置
- python_numpy_tile(a,(b,c))
- CIFS Publishers拷贝文件到windows
- PHP基础知识重温及整理
- python 打印数组中文显示为'\xe6\xb5\x8b\xe8\xaf\x95\xe4\xb8\xbb\xe6\x9c\xba‘’
- linux下,几种压缩文件的解压
- Backup/Restore Redis and ElasticSearch
- java中可以出现的中文乱码的集中解决
- Java学习心得之网络编程
- 笨方法学习Python-习题23: 读代码