1、切片操作类型
- 第一种:[:,xx,:]冒号没有连写,表示取所在维度的全部;第二维只取了index=xx的元素,即当前维度只有1个值,当前维度会被舍弃。
- 第二种:[::-2,m:n]逗号前两个连写的冒号表示按step=-2在当前维度的[0,end]范围内取值,如果直接是[::,m:n],则默认step=1,实际就是取当前维度的全部;逗号后面m:n表示当前按step=1在当前维度的[m,n)范围取值;
- 第三种:[:,xx]逗号后面xx表示特定的数值,和第一种的效果是一样的。
- 第四种:[:,xx:xx+1]逗号后面的切片虽然也只能取到index=xx这一处的值,但可以保留住当前维的维度不被消除。
- 第五种:[…,xx]三个点表示前面这些维度的size都保持不变,后面的xx表示最后一个维度只取index=xx处的值。由于最后一维只有1个值,当前维度会被舍弃。
- 第六种:[…,xx,None] 前面的三个点和xx 参考
第五种的解释,最后的None表示扩张1个维度,所以整体是消失一个维度,又新增一个维度,整体维度不变。
总结:
只要某一维的切片没有使用
冒号,那当前维在结果中会消失
保留size=1的维度方法:
- 方法一:[:,xx,None]
- 方法二:[:,xx,numpy.newaxis]
- 方法三:[:,[xx]]
- 方法四:[:,xx].reshape(指定维度)
- 方法五:[:,xx:xx+1] 虽然最后一维也只取到1个数值,但是这种切片会保留最后一维的维度。
2、代码
import numpy as np
a = np.array([[[1,2,3,4],
[5,6,7,8],
[2,3,4,5]],
[[2,4,6,8],
[1,3,5,7],
[5,6,7,8]],
[[8,6,4,2],
[9,7,5,3],
[1,6,9,2]]])
print('a=',a.shape)
# 测试冒号切片
a1=a[::,0:2]
print('a1=',a1.shape,'\n',a1)
# 测试某个维度只取1个元素
b=a[:,0,:]
c=a[:,0]
print('b=',b.shape,'\n',b)
print('c=',c.shape,'\n',c)
# 测试保留size=1的维度
b1=a[:,0,None]
c1=a[:,0,np.newaxis]
d1=a[:,[0]]
e1=a[:,0].reshape(a.shape[0],1,a.shape[2])
print('b1=',b1.shape,'\n',b1)
print('c1=',c1.shape,'\n',c1)
print('d1=',d1.shape,'\n',d1)
print('e1=',e1.shape,'\n',e1)
# 测试3个点
a2 = a[..., 2]
print(a2.shape, '\n', a2)
# 结果
(3, 3)
[[3 7 4]
[6 5 7]
[4 5 9]]
a3 = a[..., 2,None]
print(a3.shape, '\n', a3)
# 结果
(3, 3, 1)
[[[3]
[7]
[4]]
[[6]
[5]
[7]]
[[4]
[5]
[9]]]
==========结果输出==============
a= (3, 3, 4)
==========a1开始==============
a1= (3, 2, 4)
[[[1 2 3 4]
[5 6 7 8]]
[[2 4 6 8]
[1 3 5 7]]
[[8 6 4 2]
[9 7 5 3]]]
==========b开始==============
b= (3, 4)
[[1 2 3 4]
[2 4 6 8]
[8 6 4 2]]
==========c开始==============
c= (3, 4)
[[1 2 3 4]
[2 4 6 8]
[8 6 4 2]]
==========b1开始==============
b1= (3, 1, 4)
[[[1 2 3 4]]
[[2 4 6 8]]
[[8 6 4 2]]]
==========c1开始==============
c1= (3, 1, 4)
[[[1 2 3 4]]
[[2 4 6 8]]
[[8 6 4 2]]]
==========d1开始==============
d1= (3, 1, 4)
[[[1 2 3 4]]
[[2 4 6 8]]
[[8 6 4 2]]]
==========e1开始==============
e1= (3, 1, 4)
[[[1 2 3 4]]
[[2 4 6 8]]
[[8 6 4 2]]]

本文详细介绍了numpy数组中的切片操作,包括不同类型的切片规则,以及如何通过各种方法保留size=1的维度。通过实例演示展示了冒号、步长、特定索引等切片技巧及其影响。
1208

被折叠的 条评论
为什么被折叠?



