numpy.tile()函数的用法

官方说明看了许久才弄懂,在此记录下。

用法:

numpy.tile(A, reps)

其中,A为要复制的数组,reps是一个元组tuple,表复制的层次和次数 ,函数返回一个数组。

简言之,就是把数组沿各个方向复制,但遵循一定规则。

规则:

1. A的维度小于reps的元素数

        例如A是2维,reps=(a,b,c,d,e),那么复制的步骤是先把A的维度扩展到和reps相同的维度,然后按照reps中数字从右向左的顺序依次复制相应次数内部内容。

from numpy import *

a = array([[1, 2], [3, 4]])
print('A数组的内容:\n', a)
print('数组的形状:\n', a.shape)
print('数组的维度:\n', a.ndim)
b = tile(a, (1, 2, 3))
print('复制后数组的内容:\n', b)
print('复制后数组的形状:\n', b.shape)
print('复制后数组的维度:\n', b.ndim)
A数组的内容:
 [[1 2]
 [3 4]]
数组的形状:
 (2, 2)
数组的维度:
 2
复制后数组的内容:
 [[[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, 4, 6)
复制后数组的维度:
 3

2. A的维度等于reps的元素数

        该情况不需要扩充A的维度,直接复制即可。

from numpy import *

a = array([[1],[2]])
print('A数组的内容:\n', a)
print('数组的形状:\n', a.shape)
print('数组的维度:\n', a.ndim)
b = tile(a, (1, 2))
print('复制后数组的内容:\n', b)
print('复制后数组的形状:\n', b.shape)
print('复制后数组的维度:\n', b.ndim)
A数组的内容:
 [[[1 2]
  [3 4]
  [5 6]]]
数组的形状:
 (1, 3, 2)
数组的维度:
 3
复制后数组的内容:
 [[[1 2 1 2 1 2]
  [3 4 3 4 3 4]
  [5 6 5 6 5 6]
  [1 2 1 2 1 2]
  [3 4 3 4 3 4]
  [5 6 5 6 5 6]]]
复制后数组的形状:
 (1, 6, 6)
复制后数组的维度:
 3

3. A的维度大于reps的元素数

        该情况扩充reps,在reps的左边补上1,如A为3维,reps=(3,2),则补充reps为(1,3,2),然后按照上面的情况进行复制。

from numpy import *

a = array([[[1, 2],[3,4],[5,6]]])
print('A数组的内容:\n', a)
print('数组的形状:\n', a.shape)
print('数组的维度:\n', a.ndim)
b = tile(a, (2, 3))
print('复制后数组的内容:\n', b)
print('复制后数组的形状:\n', b.shape)
print('复制后数组的维度:\n', b.ndim)
A数组的内容:
 [[[1 2]
  [3 4]
  [5 6]]]
数组的形状:
 (1, 3, 2)
数组的维度:
 3
复制后数组的内容:
 [[[1 2 1 2 1 2]
  [3 4 3 4 3 4]
  [5 6 5 6 5 6]
  [1 2 1 2 1 2]
  [3 4 3 4 3 4]
  [5 6 5 6 5 6]]]
复制后数组的形状:
 (1, 6, 6)
复制后数组的维度:
 3

与广播机制的联系:

例1:

import numpy as np

# a.shape=(2,2,3,4)
a = np.arange(1,49).reshape((2,2,3,4))
# b.shape=(3,4)
b = np.arange(1,13).reshape((3,4))
# numpy会将b.shape调整至(2,2,3,4), 这一步相当于numpy自动实现np.tile(b,[2,2,1,1])
res = a + b
print('a ===================================')
print(a)
print(a.shape)

print('b ===================================')
print(b)
print(b.shape)

print('res ===================================')
print(res)
print(res.shape)

print('a+b ===================================')
print(a+b == a + np.tile(b,[2,2,1,1]) )

print('===================================')
c = np.tile(b,[2,2,1,1])
print(c)
print(c.shape)
a ===================================
[[[[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]
  [[13 14 15 16]
   [17 18 19 20]
   [21 22 23 24]]]
 [[[25 26 27 28]
   [29 30 31 32]
   [33 34 35 36]]
  [[37 38 39 40]
   [41 42 43 44]
   [45 46 47 48]]]]
(2, 2, 3, 4)
b ===================================
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
(3, 4)
res ===================================
[[[[ 2  4  6  8]
   [10 12 14 16]
   [18 20 22 24]]
  [[14 16 18 20]
   [22 24 26 28]
   [30 32 34 36]]]
 [[[26 28 30 32]
   [34 36 38 40]
   [42 44 46 48]]
  [[38 40 42 44]
   [46 48 50 52]
   [54 56 58 60]]]]
(2, 2, 3, 4)
a+b ===================================
[[[[ True  True  True  True]
   [ True  True  True  True]
   [ True  True  True  True]]
  [[ True  True  True  True]
   [ True  True  True  True]
   [ True  True  True  True]]]
 [[[ True  True  True  True]
   [ True  True  True  True]
   [ True  True  True  True]]
  [[ True  True  True  True]
   [ True  True  True  True]
   [ True  True  True  True]]]]
===================================
[[[[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]
  [[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]]
 [[[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]
  [[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]]]
(2, 2, 3, 4)

例2:

a = np.arange(12).reshape(4,3)
# b.shape=(4,1)
b = np.arange(4).reshape(4,1)
# numpy会将b.shape调整至(4,3), 这一步相当于numpy自动实现np.tile(b,[1,3])
res = a + b
print('===================================')
print(a)
print(a.shape)
print('===================================')
print(b)
print(b.shape)
print('===================================')
print(res)
print(res.shape)
print('===================================')
print((a+b == a + np.tile(b,[1,3])) )  # 打印结果都是True
===================================
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
(4, 3)
===================================
[[0]
 [1]
 [2]
 [3]]
(4, 1)
===================================
[[ 0  1  2]
 [ 4  5  6]
 [ 8  9 10]
 [12 13 14]]
(4, 3)
===================================
[[ True  True  True]
 [ True  True  True]
 [ True  True  True]
 [ True  True  True]]

例3:

a = np.arange(1,37).reshape((1,9,4))
# b.shape=(15,1,4)
b = np.arange(1,61).reshape((15,1,4))
res = a + b
print('===================================')
# print(a)
print(a.shape)
print('===================================')
# print(b)
print(b.shape)
print('===================================')
# print(res)
print(res.shape)
print('===================================')
q = np.tile(a,[15,1,1]) + np.tile(b,[1,9,1])
print(q == res)	# 打印结果都是True
===================================
(1, 9, 4)
===================================
(15, 1, 4)
===================================
(15, 9, 4)
===================================
[[[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]
 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]]

部分内容参考自:numpy中tile()函数的功能分析_xiangz201的博客-CSDN博客_numpy.tile()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值