用 PyCharm 玩转 NumPy 数组 “手术”:从拼接、切割到元素增删的实操笔记

发布于:2025-08-07 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

一、数组拼接:vstack 与 hstack 的 “对齐秘诀” 

1、垂直堆叠(vstack):上下对齐看行数 

2、水平堆叠(hstack):左右对齐看列数 

二、数组切割:split 的 “精准刀法” 

1、一维数组切割:按数量或位置 

2、二维数组切割:指定 “轴” 很关键 

三、元素增删:append 与 delete 的 “小心思” 

1、append:默认 “摊平” 数组,指定轴才保留维度

2、delete:删行删列看 axis,默认也摊平

四、PyCharm 里的 “避坑神器” 

五、今天的 “顿悟” 时刻 

六、最后:从 “不敢下手” 到 “大胆操作” 


    今天感觉自己像个 “数组外科医生”—— 对着 NumPy 数组切切补补,居然也玩出了章法。晚上在 PyCharm 里复盘,从数组拼接时的 “对齐术” 到切割时的 “精准刀”,踩了几个小坑,也攒了些实用技巧,索性写成笔记,给同样在 NumPy 里打转的小伙伴参考~

一、数组拼接:vstack 与 hstack 的 “对齐秘诀” 

    拼接数组时,最开始总搞不懂 “为什么有时候能拼,有时候会报错”。直到在 PyCharm 里调了几组代码,才发现核心是 “形状对齐”。 

1、垂直堆叠(vstack):上下对齐看行数 

    垂直堆叠就像 “把两个数组上下摞起来”,要求它们的列数必须相同。比如 PPT 里的例子,2 行 5 列的数组a和 2 行 5 列的数组b,用vstack拼完直接变成 4 行 5 列: 

import numpy as np

a = np.arange(10).reshape(2, -1)  # 2行5列:[[0-4], [5-9]]
b = np.repeat(1, 10).reshape(2, -1)  # 2行5列:[[1,1,1,1,1], [1,1,1,1,1]]
stacked_v = np.vstack((a, b))

print("垂直拼接后形状:", stacked_v.shape)  # 输出(4,5)

    在 PyCharm 里运行时,我特意在变量面板里对比了abshape—— 都是(2,5),列数一致,难怪能拼。后来故意把b改成 3 列,PyCharm 直接标红报错 “ValueError: all the input array dimensions for the concatenation axis must match exactly”,这下印象深刻了。 

2、水平堆叠(hstack):左右对齐看列数 

    水平堆叠则是 “左右并排”,要求行数必须相同。还是用上面的ab,换hstack试试: 

stacked_h = np.hstack((a, b))
print("水平拼接后形状:", stacked_h.shape)  # 输出(2,10)

    PyCharm 的调试面板里,stacked_h的每一行都是a的行加b的行,比如第一行是[0,1,2,3,4,1,1,1,1,1],一目了然。 

二、数组切割:split 的 “精准刀法” 

    如果说拼接是 “做加法”,那split就是 “做减法”。但切割比拼接更考验 “分寸感”,尤其是多维数组。 

1、一维数组切割:按数量或位置 

    对一维数组x = np.arange(12)切割,有两种方式:

  (1)按数量平均切:np.split(x, 3)会切成 3 个等长的子数组(各 4 个元素);

  (2)按位置切:np.split(x, [2,5])会在索引 2 和 5 的位置切,得到[0-1]、[2-4]、[5-11]

    我在 PyCharm 里用print输出结果时,发现子数组都是numpy.ndarray类型,不是列表,这点和 Python 自带的切割不太一样。

2、二维数组切割:指定 “轴” 很关键 

    二维数组切割要加axis参数:axis=0是横向切(按行),axis=1是纵向切(按列)。比如 3 行 4 列的数组: 

x = np.arange(12).reshape(3,4)
# 按行切成3份(每份1行)
split_row = np.split(x, 3, axis=0)
# 按列切成2份(每份2列)
split_col = np.split(x, 2, axis=1)

    在 PyCharm 里调试时,我盯着split_row的每个子数组 ——[[0,1,2,3]][[4,5,6,7]][[8,9,10,11]],突然明白 “横向切” 就是把每行拆成独立数组。 

三、元素增删:append 与 delete 的 “小心思” 

    给数组加元素或删元素,看着简单,实则藏着 “是否改变原数组” 的坑。

1、append:默认 “摊平” 数组,指定轴才保留维度

     append函数默认会把数组摊平成一维,比如给 2 行 3 列的数组a加元素[7,8,9]

a = np.array([[1,2,3], [4,5,6]])
print(np.append(a, [7,8,9]))  # 输出[1,2,3,4,5,6,7,8,9](一维)

    如果想保留二维,必须加axis参数。比如沿行添加(axis=0),要保证列数和原数组一致: 

print(np.append(a, [[7,8,9]], axis=0))  # 变成3行3列

    我一开始漏了[[ ]],写成[7,8,9],PyCharm 报错 “ValueError: all the input arrays must have same number of dimensions”,原来加二维数组时要保持嵌套结构。 

2、delete:删行删列看 axis,默认也摊平

  deleteappend类似,不加axis会摊平。比如删 3 行 4 列数组的第 2 列(索引 1): 

x = np.arange(12).reshape(3,4)
print(np.delete(x, 1, axis=1))  # 删掉第2列,变成3行3列

    在 PyCharm 里对比删除前后的x.shape,从(3,4)变成(3,3),一目了然。 

四、PyCharm 里的 “避坑神器” 

    学这些操作时,PyCharm 帮我少走了很多弯路:

    1、实时形状提示:输入arr.shape时,PyCharm 会自动显示数组的维度,拼接前看一眼,避免形状不匹配;

    2、报错定位准:比如hstack时行数不一致,报错信息直接指向 “dimension mismatch”,比课本上的文字描述直观;

    3、变量面板可视化:调试时点开数组变量,能看到每个元素的位置,切割和拼接后的数据变化一目了然。

五、今天的 “顿悟” 时刻 

    最开始学vstackhstack时,总记混哪个是行哪个是列。后来在 PyCharm 里画了个示意图:

  1、vstack的 “v” 像 “vertical(垂直)”,上下堆 → 行数变多;

  2、hstack的 “h” 像 “horizontal(水平)”,左右拼 → 列数变多。

    还有appendaxis的坑,其实和拼接一样:想沿行加,就保证列数匹配;想沿列加,就保证行数匹配。道理相通,只是函数不同而已。

六、最后:从 “不敢下手” 到 “大胆操作” 

    以前看到数组操作就发怵,总怕搞错维度。今天在 PyCharm 里反复试错,发现这些函数的逻辑其实很统一 —— 无非是 “按轴操作”“形状对齐”。下次再遇到新函数,先在 PyCharm 里建个小例子跑跑,看形状怎么变,元素怎么动,慢慢就有感觉了。

    如果你也在学数组操作,不妨试试 “写一行代码,看一次形状,调一次变量”—— 抽象的规则,在代码跑起来的那一刻,突然就清晰了。

                           (欢迎评论区分享你切割数组时的 “精准刀法” 呀~)


网站公告

今日签到

点亮在社区的每一天
去签到