NumPy调用np.insert向二维数组插入列结果异常咨询
问题原因
你对np.insert的值处理逻辑理解有误:该函数不会自动把传入的单个标量广播为一整列/整行匹配长度的数组。当沿axis=1(列方向)插入时,如果传入的values形状和数组行数不匹配,numpy会触发隐式的数组扁平化逻辑,插入值后再按默认规则重排形状,最终就会出现你遇到的维度完全错乱的问题。
另外需要注意np.insert的固定参数顺序是(目标数组, 插入位置, 插入值, 轴向),参数顺序传错也会导致结果异常。
正确实现方案
下面三种写法都可以稳定得到你要的「第一列全为1」的4行4列数组,选一种用就行:
- 方案1:正确调用
np.insert,传入和原数组行数等长的全1数组,不要传单个标量row_count = base_points_array.shape[0] result = np.insert(base_points_array, obj=0, values=np.ones(row_count), axis=1) - 方案2:用水平拼接函数
np.hstack,逻辑更直观,不容易踩参数的坑row_count = base_points_array.shape[0] ones_col = np.ones((row_count, 1)) # 生成4行1列的全1列 result = np.hstack([ones_col, base_points_array]) - 方案3:用numpy的列拼接简写
np.c_,代码最简洁result = np.c_[np.ones(base_points_array.shape[0]), base_points_array]
运行后得到的结果完全符合预期:
array([[ 1. , -1.5, -1.5, -1.5], [ 1. , -1.5, -1.5, -0.8], [ 1. , -1.5, -0.8, -0.8], [ 1. , -0.8, -0.8, -0.8]])
内容的提问来源于stack exchange,提问作者eeqesri
相关产品推荐
相关产品推荐

