numpy.tile()函数的用法

编程入门 行业动态 更新时间:2024-10-18 16:46:43

numpy.tile()<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数的用法"/>

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()

更多推荐

numpy.tile()函数的用法

本文发布于:2024-02-25 19:50:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1700110.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   numpy   tile

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!