关于numpy.insert函数在二维数组中插入逻辑与参数的疑问
理解numpy.insert在二维数组中的工作机制
我来帮你拆解一下这个函数的参数逻辑和两个示例的差异,你就能明白其中的行为了:
核心参数解析
首先明确numpy.insert(arr, obj, values, axis=None)里几个关键参数的含义:
obj参数:这是你指定插入位置的参数。当指定axis后,它表示在对应轴的某个索引位置之前插入值。如果obj是一个列表(比如你第一个例子里的[2,2]),就意味着要在这些位置分别执行一次插入操作。values参数:要插入的内容,必须和原数组在axis指定的维度上匹配长度——比如axis=1(列轴)时,values的长度要和原数组的行数一致;axis=0(行轴)时,要和原数组的列数一致。axis参数:axis=1表示沿列方向操作(横向插入),axis=0表示沿行方向操作(纵向插入)。
第一个示例拆解
原数组s的结构是:
import numpy as np s = np.array([[1,2,3],[2,3,4]]) print(s) # 输出: # [[1 2 3] # [2 3 4]]
执行t = np.insert(s, [2,2], [0,1], axis=1)时:
obj=[2,2]表示要在列索引2的位置连续插入两次(每次插入都在当前数组的列2之前);values=[0,1]是长度为2的列表,刚好匹配原数组的2行,所以每次插入的是一行0和一行1;- 第一次插入后,数组变成:
第二次再在新数组的列2位置插入[[1 2 0 3] [2 3 1 4]][0,1],最终得到:[[1 2 0 0 3] [2 3 1 1 4]]
第二个示例拆解
原数组a和s完全相同,执行b = np.insert(a, 2, [0,1], axis=1)时:
obj=2是单个索引,只在列索引2的位置插入一次[0,1],所以最终结果就是第一次插入后的数组:[[1 2 0 3] [2 3 1 4]]
简单来说,第一个例子里的[2,2]就是告诉numpy“在列2的位置插两次”,而第二个例子只插一次,这就是两者行为差异的核心原因。
内容的提问来源于stack exchange,提问作者sara
相关产品推荐
相关产品推荐

