- >>> 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. 函数其他注意事项
1 当 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])
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]])
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 类型的数值顺序不变.
二, 图解 tile 函数
看到一个很棒的解释, 贴在这里.
来源: http://www.bubuko.com/infodetail-2848835.html