numpy三维切片还不会,那你会切西瓜吗?

numpy三维切片

1、numpy定义三维array

首先定义一个三维array

import numpy as np
array = np.array([
         [[14, 32, 56, 32, 48],
          [92, 53, 55, 63, 74],
          [46, 76, 45, 98, 12],
          [34, 65, 32, 12, 50]],
          
         [[58, 52, 32, 20, 32],
          [30, 30, 20, 85, 61],
          [20, 14, 34, 32, 15],
          [78, 35, 22, 30, 20]],
          
         [[10, 20, 15, 32, 85],
          [58, 20, 30, 58, 30],
          [56, 85, 32, 20, 12],
          [75, 55, 65, 85, 32]]
             ])


array的形状为(3,4,5)
array根据轴的方向分为axis = 0,axis = 1,axis = 2
将array进行可视化:
在这里插入图片描述
上图可以理解为三块(4x5)的数组快按axis = 0方向进行堆叠(stack),每一个小方块代表一个数值,其位置与array中元素位置相对应

2、对三维array沿axis = 0 方向切片

array[1, :, :]

array[1, :, :]
Out[4]: 
array([[58, 52, 32, 20, 32],
       [30, 30, 20, 85, 61],
       [20, 14, 34, 32, 15],
       [78, 35, 22, 30, 20]])

切片效果如图所示:
在这里插入图片描述
切片结果为上图红色部分

3、对三维array沿axis = 1 方向切片

array[:, 1, :]

array[:,1,:]
Out[5]: 
array([[92, 53, 55, 63, 74],
       [30, 30, 20, 85, 61],
       [58, 20, 30, 58, 30]])

切片效果如图所示:
在这里插入图片描述
切片结果为上图红色部分

4、对三维array沿axis = 2 方向切片

array[:,:,1]
Out[6]: 
array([[32, 53, 76, 65],
       [52, 30, 14, 35],
       [20, 20, 85, 55]])

切片效果如图所示:
在这里插入图片描述
切片结果为上图红色部分

5、不同方向求array最大值,np.max(array, axis = ?)

对数据在三维空间中是如何堆叠起来的有了深层次的理解之后,再来感受一下如何按照不同的方向去进行函数操作,以np.max()为例

np.max(array_, 0),axis=0, 输出的形状就为第二维x第三维,即(4x5),想当与把第一维(3)合并成(1)维,最后的形状可以看成(1x4x5)

import numpy as np
array_ = np.array([
         [[14, 32, 56, 32, 48],
          [92, 53, 55, 63, 74],
          [46, 76, 45, 98, 12],
          [34, 65, 32, 12, 50]],
          
         [[58, 52, 32, 20, 32],
          [30, 30, 20, 85, 61],
          [20, 14, 34, 32, 15],
          [78, 35, 22, 30, 20]],
          
         [[10, 20, 15, 32, 85],
          [58, 20, 30, 58, 30],
          [56, 85, 32, 20, 12],
          [75, 55, 65, 85, 32]]
             ])
print('axis = 0 \n',np.max(array_, 0))
axis = 0 
 [[58 52 56 32 85]
 [92 53 55 85 74]
 [56 85 45 98 15]
 [78 65 65 85 50]]

np.max(array_, 1),axis=1, 输出的形状就为第一维x第三维,即(3x5),想当与把第二维(4)合并成1个维度,最后的形状可以看成(3x1x5)

print('axis = 1 \n',np.max(array_, 1))
axis = 1 
 [[92 76 56 98 74]
 [78 52 34 85 61]
 [75 85 65 85 85]]

np.max(array_, 2),axis=2, 输出的形状就为第一维x第三维,即(3x4),想当与把第三维(5)合并成1个维度,最后的形状可以看成(3x4x1)

print('axis = 2 \n',np.max(array_, 2))
axis = 2 
 [[56 92 98 65]
 [58 85 34 78]
 [85 58 85 85]]

总结

三维数组进行切片和函数操作的时候,可以把数组想象成三维空间的元素堆叠而成,按照axis=0、axis=1、axis=2三个方向进行操作,久而久之,便能熟能生巧。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用numpy三维数组进行切片时,我们可以使用下标来选择数组的特定部分。例如,假设我们有一个三维数组a,其形状为(3, 3, 4)。要对该数组进行切片,可以使用如下语法: a[start:end:step, start:end:step, start:end:step] 其中,start表示切片的起始位置,end表示切片的结束位置(不包含该位置的元素),step表示切片的步长。如果不指定start、end和step,默认值分别为0、数组的长度和1。 举个例子,假设我们有以下三维数组: a = np.array([[[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]]]) 如果我们想要取出第一个维度的第一个元素([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]),可以使用以下切片操作: a[0,:,:] 如果我们想要取出第一个维度的第一个元素的前两行([[1, 2, 3, 4], [5, 6, 7, 8]]),可以使用以下切片操作: a[0,:2,:] 如果我们想要取出第一个维度的第一个元素的前两行的前两列([[1, 2], [5, 6]]),可以使用以下切片操作: a[0,:2,:2] 希望这样的解释对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [numpy 索引及切片](https://download.csdn.net/download/weixin_38653664/14910800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [numpy三维数据切片](https://blog.csdn.net/weixin_40529493/article/details/120576449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值