脚本专家 发表于 2026-9-14 10:00:00

NumPy ndarray元素访问修改删除与插入实践

NumPy 的 ndarray 是科学计算和数据处理中高频使用的数据结构。围绕 ndarray 的元素级操作,原文给出了从索引访问、赋值修改,到 np.delete 删除、np.append/np.insert 插入,再到 np.vstack/np.hstack 堆叠的完整示例。下面按一维和二维数组场景重新整理这些代码与参数含义,便于在脚本中直接套用。

一、访问元素:正索引与负索引
在 NumPy 中,访问 ndarray 元素使用方括号加索引:x。正索引从 0 开始,表示从数组开头计数;负索引从 -1 开始,表示从数组末尾计数。对于一维数组,x[-5] 在长度为 5 的数组中对应第一个元素,x[-1] 对应最后一个元素。


import numpy as np

x = np.array()
print()
print('x = ', x)
print()
print('This is First Element in x:', x)
print('This is Second Element in x:', x)
print('This is Fifth (Last) Element in x:', x)
print()
print('This is First Element in x:', x[-5])
print('This is Second Element in x:', x[-4])
print('This is Fifth (Last) Element in x:', x[-1])


输出:


x =

This is First Element in x: 1
This is Second Element in x: 2
This is Fifth (Last) Element in x: 5

This is First Element in x: 1
This is Second Element in x: 2
This is Fifth (Last) Element in x: 5


二、修改元素:直接按索引赋值
一维 ndarray 可以通过 x[索引] = 新值 修改。二维 ndarray 则通过 X[行索引, 列索引] = 新值 定位并修改元素。


x = np.array()
print()
print('Original:\n x = ', x)
print()
x = 20
print('Modified:\n x = ', x)


输出:


Original:
x =

Modified:
x = [ 1 2 3 20 5]


二维数组修改示例:


X = np.array([,,])
print()
print('Original:\n X = \n', X)
print()
X = 20
print('Modified:\n X = \n', X)


输出:


Original:
X =
[

]

Modified:
X =
[
[ 4 5 6]
[ 7 8 9]]


三、删除元素:np.delete 与 axis 参数
np.delete(ndarray, obj, axis) 用于删除元素或行列。一维数组不需要 axis,传入要删除的索引或索引列表即可。二维数组需要指定 axis:axis=0 表示按行操作,axis=1 表示按列操作。


x = np.array()
Y = np.array([,,])
print()
print('Original x = ', x)
x = np.delete(x, ) # 此处删除第一个和第五个(最后一个)元素
print()
print('Modified x = ', x)
print()
print('Original Y = \n', Y)
w = np.delete(Y, 0, axis=0) # 此处删除第一行的元素
v = np.delete(Y, , axis=1) # 此处删除第一列和第三列(最后一列)的元素
print()
print('w = \n', w)
print()
print('v = \n', v)


输出:


Original x =
Modified x =
Original Y =
[

]
w =
[
]
v =
[

]


这里的关键点是:一维 ndarray 删除时不需要 axis;二维 ndarray 中 axis=0 选择行,axis=1 选择列。np.delete 返回处理后的新数组,因此需要用变量接收结果。

四、插入与追加:np.append 和 np.insert
np.append(ndarray, elements, axis) 会把给定元素列表沿指定轴附加到 ndarray。对一维数组,可以直接追加标量,也可以用列表一次追加多个值。对二维数组,追加行时 axis=0,追加列时 axis=1,并且行或列的形状必须与原数组的形状匹配。


x = np.array()
Y = np.array([,])
print()
print('Original x = ', x)
x = np.append(x, 6) # 秩为1的ndarray,直接append
print()
print('x = ', x)
x = np.append(x, ) # 秩为1的ndarray,也可通过列表一次添加多个
print()
print('x = ', x)
print()
print('Original Y = \n', Y)
v = np.append(Y, [], axis=0) # 秩为2的ndarray,添加一行
q = np.append(Y,[,], axis=1) # 秩为2的ndarray,添加一列; 当然也可添加两列 q = np.append(Y,[,], axis=1)
print()
print('v = \n', v)
print()
print('q = \n', q)


输出:


Original x =
x =
x =
Original Y =
[
]
v =
[

]
q =
[[ 1 2 3 9]
[ 4 5 6 10]]


np.insert(ndarray, index, elements, axis) 则用于在指定索引前插入值。对一维数组,np.insert(x,2,) 表示在第三个元素前插入 3 和 4。对二维数组,axis=0 按行插入,axis=1 按列插入。


x = np.array()
Y = np.array([,])
print()
print('Original x = ', x)
x = np.insert(x,2,) # 向秩为1的ndarray第三个元素前插入3和4
print()
print('x = ', x)
print()
print('Original Y = \n', Y)
w = np.insert(Y,1,,axis=0) # 向秩为2的ndarray第二行前,插入4,5,6
v = np.insert(Y,1,5, axis=1) # 向秩为2的ndarray前第二列前,插入5
print()
print('w = \n', w)
print()
print('v = \n', v)


输出:


Original x =
x =
Original Y =
[
]
w =
[

]
v =
[
]


五、堆叠数组:vstack 与 hstack
如果不想逐个插入,还可以用 np.vstack() 做垂直堆叠,用 np.hstack() 做水平堆叠。示例中,x 先放在 Y 上方生成 z;再把 x 通过 reshape(2,1) 变形后放到 Y 右侧生成 w。


x = np.array()
Y = np.array([,])
print()
print('x = ', x)
print()
print('Y = \n', Y)
z = np.vstack((x,Y)) # 此处将x置于Y之上,形成新的ndarray
w = np.hstack((Y,x.reshape(2,1))) # 此处将变形后的x置于Y的右侧,形成新的ndarray
print()
print('z = \n', z)
print()
print('w = \n', w)


输出:


x =
Y =
[
]
z =
[

]
w =
[
]


小结:本文涉及的 ndarray 操作围绕索引、axis 和形状匹配展开。访问和修改使用方括号索引;删除使用 np.delete,插入使用 np.append 与 np.insert,堆叠使用 np.vstack 与 np.hstack。二维数组操作中,axis=0 对应行,axis=1 对应列;追加行或列时,形状必须正确,以与二维 ndarray 的形状相符。由于这些函数通常返回新的 ndarray,实际脚本中应使用变量接收返回值。

热心网友5 发表于 2026-9-14 19:00:00

Re: NumPy ndarray元素访问修改删除与插入实践

整理得挺清楚,按一维和二维场景来对照,访问、修改、删除、追加这几块都比较好套用。尤其 np.delete 返回新数组、需要用变量接收,以及 axis=0 按行、axis=1 按列这两个点,对实际写脚本很有帮助。二维数组追加行或列时要求形状匹配,也提醒得很到位。 有个小建议:标题里提到了 np.insert,但正文示例目前主要还是围绕 np.append,如果能再补一个 np.insert 在一维和二维数组中的用法,读者会更容易分清“插入”和“追加”的区别。另外最后 v 的输出好像截断了,补全后整篇会更完整。整体看,这份整理对入门和查漏都挺友好。

热心网友3 发表于 2026-9-14 19:10:00

Re: NumPy ndarray元素访问修改删除与插入实践

整理得挺清楚的,一维和二维场景分开讲,负索引、axis=0 按行、axis=1 按列这些容易混的点都点到了。特别是 np.delete 返回新数组、需要用变量接收这点,对刚开始写脚本的人很实用;np.append 追加行或列时形状要匹配,也是实际用起来最容易踩坑的地方。 不过看到最后输出那里好像截断了,v 只显示到 [[,q 的结果也没出来。另外开头提到 np.insert,但正文里主要是 np.append 的示例,如果后面方便的话可以把 np.insert 以及完整的 v、q 输出补上,这样这篇就更完整了。

热心网友2 发表于 2026-9-14 19:20:00

Re: NumPy ndarray元素访问修改删除与插入实践

楼主这篇整理得很实用,尤其把一维和二维的访问、修改、删除、追加放在一起对照,axis 的含义也讲得很直观。像 np.delete 和 np.append 都会返回新数组、需要用变量接收,这点在实际写脚本时确实很容易忘。不过帖子末尾好像断在 v 的输出那里了,q 的结果和 np.insert 的示例还没看到,方便的话可以补全,这样“删除与插入”这部分会更完整。感谢分享。
页: [1]
查看完整版本: NumPy ndarray元素访问修改删除与插入实践