numpy数组使用-1索引后维度缺失问题咨询
NumPy数组索引后维度消失的问题解答
你遇到的问题核心是NumPy中整数索引与切片索引的行为差异:
- 使用
:-1这类切片形式时,会保留原数组的维度,因此a[:,:-1,:]得到(2,4,3),符合预期; - 而使用
-1这类单个整数索引时,NumPy会自动挤压掉该维度,导致原本的第二维度消失,所以a[:,-1,:]的shape变为(2,3)。
验证与解决方法
如果想要保留第二维度,得到(2,1,3)的结果,可通过以下两种方式实现:
- 用切片形式选取单个元素,将
-1改为-1::
import numpy as np a = np.random.rand(2,5,3) y = a[:,-1:,:] # 切片索引保留维度 print(y.shape) # 输出 (2, 1, 3)
- 手动添加维度,使用
np.expand_dims:
y = np.expand_dims(a[:,-1,:], axis=1) print(y.shape) # 输出 (2, 1, 3)
原代码与输出
你的原代码:
import numpy as np a = np.random.rand(2,5,3) print(a) x = a[:,:-1,:] y = a[:,-1,:] print(x.shape) print(y.shape)
输出结果:
[[[0.18648295 0.45018899 0.37269369] [0.28727699 0.74595982 0.24410613] [0.73484484 0.62852367 0.71091093] [0.82692484 0.93791066 0.31497567] [0.5506998 0.3992407 0.55229818]] [[0.33900664 0.37279058 0.59162413] [0.18841992 0.94866945 0.7417921 ] [0.67865254 0.61119384 0.49094303] [0.07091689 0.55436234 0.80671508] [0.37598695 0.96572699 0.04268124]]] (2, 4, 3) (2, 3)
内容的提问来源于stack exchange,提问作者tangfengsongyu
相关产品推荐
相关产品推荐

