numpy.tile()函数说明

numpy.tile()函数说明

这个函数的作用是把数组沿各个方向复制,我这里不用x轴、y轴之类的说法,用中括号的位置来说明。当参数只有一个数字的时候,这个函数会将数组最里面的中括号的内容在中括号里面扩展复制。看代码就能明白:

ar = np.array([1,2,3])
print(ar)
print(np.tile(ar,0))
print(np.tile(ar,1))
print(np.tile(ar,2))

输出为:

[1 2 3]
[]
[1 2 3]
[1 2 3 1 2 3]

当只有一个参数为且0的时候,会清空,1不复制,2则复制了一个,所以中括号内一共两个。

当有两个参数的时候,例如(2,1)则1是针对最里面的中括号里面的,即最里面的维度,而2 是针对倒数第二层的维度进行复制:

ar2 = np.array([[1,2,3],[4,5,6]])
print(ar2)
print('-'*20)
print(np.tile(ar2,(2,1)))
print('-'*20)
print(np.tile(ar2,(2,2)))

输出为:

[[1 2 3]
 [4 5 6]]
--------------------
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]
--------------------
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]
 [1 2 3 1 2 3]
 [4 5 6 4 5 6]]

可以看到,对于二维数组,(2,1)没有复制最里面中括号的内容,只复制了倒数第二次中括号里面的内容。
需要注意的是,对于一维数组,(2,1)会将数组升为二维,因为它对最里层中括号不复制,而最里层中括号外进行复制,因此会将一个一维数组复制成两个一维数组,变成一个二维数组:

ar = np.array([1,2,3])
print(ar)
print('-'*20)
print(np.tile(ar,(2,1)))

输出为:

[1 2 3]
--------------------
[[1 2 3]
 [1 2 3]]

还需要注意的是,当你的参数只有一个的时候,不管带不带括号,如2和(2),效果都是一样的,都只在最里层的中括号内复制:

ar = np.array([1,2,3])
print(ar)
print('-'*20)
print(np.tile(ar,2))
print('-'*20)
print(np.tile(ar,(2)))

print('-'*20)
ar2 = np.array([[1,2,3],[4,5,6]])
print(ar2)
print('-'*20)
print(np.tile(ar2,2))
print('-'*20)
print(np.tile(ar2,(2)))

输出为:

[1 2 3]
--------------------
[1 2 3 1 2 3]
--------------------
[1 2 3 1 2 3]
--------------------
[[1 2 3]
 [4 5 6]]
--------------------
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]
--------------------
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]

所以当你参数再进行增加的时候,如(2,1,1),这种是针对二维及以上的数组,第一个2表示复制倒数第三层中括号的内容,当数组是二维数组就会复制成两个二维数组,变成一个三维数组;2后面的第一个1表示倒数第二层中括号里面的内容不变,第二个1表示倒数第一层中括号里的内容即最里层中括号的内容也不变:

ar3 = np.random.randint(10,size = (2,3,4))
print(ar3)
print('-'*20)
print(np.tile(ar3,(2,1,1)))

输出为:

[[[7 5 5 8]
  [0 8 3 6]
  [9 3 2 7]]

 [[0 3 0 3]
  [6 1 9 2]
  [9 4 9 1]]]
--------------------
[[[7 5 5 8]
  [0 8 3 6]
  [9 3 2 7]]

 [[0 3 0 3]
  [6 1 9 2]
  [9 4 9 1]]

 [[7 5 5 8]
  [0 8 3 6]
  [9 3 2 7]]

 [[0 3 0 3]
  [6 1 9 2]
  [9 4 9 1]]]

可以看到只将倒数第三层中括号里的内容进行了复制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值