Numpy中tile()函数简单理解

本文介绍了Numpy中的tile()函数,用于扩展ndarray类型的多维张量。通过一个实例详细解释了如何进行维度对齐和元素复制,帮助理解tile()函数的工作原理。
摘要由CSDN通过智能技术生成

Numpy模块中的tile()函数用于对类型为ndarray的多维张量的扩展
下面用一个例子说明tile()函数的作用

定义张量b

>>> b = np.array([[1, 2], [3, 4]])
array([[1, 2],
       [3, 4]])
>>> b.shape
(2, 2)

扩充b,并赋值给张量f

# reps是一个tuple,按照下述中第一步的维度对齐操作得到新的reps,其中每个元素索引及值分别记为idx, value,表示张量f中第idx维中的元素整体复制value-1次,详见下述描述。
>>> reps = (2, 1, 2, 2)
>>> f = np.tile(b, reps)
>>> f
array([[[[1, 2, 1, 2],
         [3, 4, 3, 4],
         [1, 2, 1, 2],
         [3, 4, 3, 4]]],
       [[[1, 2, 1, 2],
         [3, 4, 3, 4],
         [1, 2, 1, 2],
         [3, 4, 3, 4]]]])
>>> f.shape
(2, 1, 4, 4)
>>> reps = (2, 1, 2, 3)
>>> f = np.tile(b, reps)
>>> f
array([[[[1, 2, 1, 2, 1, 2],
         [3, 4, 3, 4, 3, 4],
         [1, 2, 1, 2, 1, 2],
         [3, 4, 3, 4, 3, 4]]],
       [[[1, 2, 1, 2, 1, 2],
         [3, 4, 3, 4, 3, 4],
         [1, 2, 1, 2, 1, 2],
         [3, 4, 3, 4, 3, 4]]]])
>>> f.shape
(2, 1, 4, 6)
>>> b_ndim = b.ndim
>>> b_ndim
2
>>> d = len(reps)
>>> d
4

b的维度记为b_ndim,元组reps的长度记为d,bf的过程,可以按照如下描述理解。

第一步:维度对齐

1). 如果b_ndim = d,已经对齐,执行到第二步;
2). 否则,如果b_ndim < d,把b变成d维张量,上例中b_ndim = 2, d = 4,所以把b变成4维度张量,记为 c 1 = [ [ [ [ 1 , 2 ] , [ 3 , 4 ] ] ] ] c1 = [[[[1, 2], [3, 4]]]] c1=[[[[1,2],[3,4]]]],执行第二步;
3). 否则,如果b_ndim > d,把d的长度提升为b_ndim,方法是向d的初始位置插入b_ndim - d1,如b_ndim = 4, d = (2,3),则操作后d = (1, 1, 2, 3),执行第二步。

第二步:复制元素

从前往后遍历reps,对于每一次遍历,记得到的下标和元素分别记为i,t
1). i = 0, t = 2 c i + 1 = c 1 = [ [ [ [ 1 , 2 ] , [ 3 , 4 ] ] ] ] c_{i+1} = c_1 = [[[[1, 2], [3, 4]]]] ci+1=c1=[[[[1,2],[3,4]]]]i+1维即第1维的所有元素, 即 c 1 [ 0 ] = [ [ [ 1 , 2 ] , [ 3 , 4 ] ] ] c_1[0] = [[[1, 2], [3, 4]]] c1[0]=[[[1,2],[3,4]]] 分别复制t = 2倍,得到 c 2 = [ [ [ [ 1 , 2 ] , [ 3 , 4 ] ] ] , [ [ [ 1 , 2 ] , [ 3 , 4 ] ] ] ] c_2 = [[[[1, 2], [3, 4]]], [[[1, 2], [3, 4]]]] c2=[[[[1,2],[3,4]]],[[[1,2],[3,4]]]]
2). i = 1, t = 1 c i + 1 = c 2 = [ [ [ [ 1 , 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值