NumPy中列的表示方式及正确访问方法技术咨询
嘿,很高兴你的代码已经能正常运行啦!让我来帮你把NumPy里列的表示逻辑和正确访问方法理清楚~
NumPy中列的表示与访问指南
先搞懂二维数组的索引逻辑
NumPy的二维数组是行优先组织的,简单说就是:第一个索引对应「行」,第二个索引对应「列」。比如你定义的这个4行3列的数组:
import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
行索引范围是0-3,列索引是0-2,完全符合你描述的结构。
访问单列的正确姿势
要单独取出某一列,用[:, 列索引]的切片语法就可以:
:代表选中所有行- 后面的数字就是你要访问的列的索引
举个例子:
# 取出第0列(最左边的列) print(x[:, 0]) # 输出: [0 3 6 9] # 取出第2列(最右边的列) print(x[:, 2]) # 输出: [ 2 5 8 11]
同时访问多个列
如果要一次性选好几列,把列索引放进列表/数组里就行:
# 同时选第0列和第2列 print(x[:, [0, 2]]) # 输出结果是一个4行2列的数组: # [[ 0 2] # [ 3 5] # [ 6 8] # [ 9 11]]
优化你选角落元素的代码
你要选数组的四个角落元素((0,0)、(0,2)、(3,0)、(3,2)),可以用更简洁的方式实现:
# 方法1:先选指定行,再选指定列 corner_elements = x[[0, 3], :][:, [0, 2]] # 方法2:用np.ix_()避免维度问题(更推荐) corner_elements = x[np.ix_([0,3], [0,2])] print(corner_elements) # 输出: # [[ 0 2] # [ 9 11]]
np.ix_()的作用是把行和列的索引转换成能正确交叉匹配的格式,防止出现一维数组的意外情况,选多个行和列的时候用它更稳妥。
小补充:保持列的二维形状
默认情况下,取出单列会得到一维数组(比如x[:,0]的形状是(4,)),如果想让它保持二维数组的形态(比如(4,1)),可以这么写:
# 方式1:用列表包裹列索引 print(x[:, [0]].shape) # 输出: (4, 1) # 方式2:添加新轴 print(x[:, 0, np.newaxis].shape) # 输出: (4, 1)
内容的提问来源于stack exchange,提问作者Arun Reddy
相关产品推荐
相关产品推荐

