NumPy 数组切片搞混了,求助大佬
刚开始上手 NumPy,在处理多维数组切片的时候彻底绕晕了。本来想截取一个矩阵的特定列,结果出来的维度完全不是我想象的样子,而且 Python 报错提示
下一篇
用Kronecker序列替代SGD采样:训练成本砍半的骚操作 →
IndexError: index too large for axis,卡了我半个小时。我当时写的代码大概是这种逻辑:
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)?感觉这块的底层逻辑还是有点模糊。
