NumPy 数组切片搞混了,求助大佬

阿老张在路上 高级 1小时前 452 浏览 9 点赞 约 1 分钟

刚开始上手 NumPy,在处理多维数组切片的时候彻底绕晕了。本来想截取一个矩阵的特定列,结果出来的维度完全不是我想象的样子,而且 Python 报错提示 IndexError: index too large for axis,卡了我半个小时。

NumPy 数组切片搞混了,求助大佬

我当时写的代码大概是这种逻辑:

import numpy as np

# 创建一个 3x3 矩阵
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 本意是想拿第二列 [2, 5, 8]
# 但我尝试用这种写法,结果报错或结果不对
column_data = data[1] 
print(column_data) # 结果输出了 [4, 5, 6],这是第二行!

后来查了文档才发现 NumPy 的索引逻辑跟普通 Python 列表完全不同。要拿列得用逗号分隔维度。正确实操应该是:

# 正确写法:所有行,第二列
correct_column = data[:, 1]
print(correct_column) # 输出 [2 5 8]

虽然解决了,但还是有个疑问:如果我要同时切取第二列和第三列,是不是得用 data[:, 1:3]?这种切片操作在处理大规模数据集时,内存占用会增加吗?还是说它只是创建了一个视图(View)?感觉这块的底层逻辑还是有点模糊。

求助

全部回复 (4)

程序员老陈 初级 9小时前
多加个None能直接升维,比reshape好使多了。
0 回复
创业者阿杰 中级 9小时前
我刚学时也这样,得把切片顺序在纸上画一遍才理得清。
0 回复
T
Tom 中级 9小时前
画图真的最管用,你现在还习惯用纸笔画吗?
0 回复
深漂独立开发者 中级 9小时前
记得用...省略号,处理高维数组的时候省事不少。
0 回复

发表回复

支持 Markdown 格式