Python 2.7中如何在Numpy矩阵指定位置正确插入列表?
在Numpy矩阵指定位置插入列表的正确方法
嘿,我明白你遇到的问题了——直接用普通列表的操作来处理Numpy矩阵,很容易把结构搞乱对吧?别担心,我来给你一步步讲清楚怎么正确实现任意位置的插入。
首先要明确:Numpy的数组(你说的“矩阵”)和普通Python列表是完全不同的数据结构,必须用Numpy专门的函数来操作,不然就会出现你遇到的“合并成单列表”的问题。
1. 一维数组的插入
如果你的“矩阵”是一维的(比如[1,2,3,4]),想要插入一个列表到指定索引,用np.insert()函数就可以搞定:
import numpy as np # 原一维Numpy数组 M = np.array([1, 2, 3, 4]) # 要插入的列表,直接传入或转成Numpy数组都可以 insert_list = [5, 6, 7] # 插入到索引1的位置(也就是第二个位置,Numpy索引从0开始) new_M = np.insert(M, 1, insert_list) print(new_M) # 输出:[1 5 6 7 2 3 4]
2. 二维矩阵的插入
如果是真正的二维矩阵,要区分插入行还是列,需要指定axis参数:
插入一行
要插入的行的长度必须和原矩阵的列数一致:
import numpy as np # 原二维矩阵 M = np.array([[1, 2], [3, 4], [7, 8]]) # 要插入的行(长度和原矩阵列数相同,都是2) insert_row = [5, 6] # axis=0表示沿着行的方向插入,索引1表示插在第二行的位置 new_M = np.insert(M, 1, insert_row, axis=0) print(new_M) # 输出: # [[1 2] # [5 6] # [3 4] # [7 8]]
插入一列
要插入的列的长度必须和原矩阵的行数一致,而且需要把列表转成二维数组(不然会维度不匹配报错):
import numpy as np # 原二维矩阵 M = np.array([[1, 2], [3, 4], [7, 8]]) # 要插入的列,转成二维数组(reshape(-1,1)自动适配行数) insert_col = np.array([5, 6, 9]).reshape(-1, 1) # axis=1表示沿着列的方向插入,索引1表示插在第二列的位置 new_M = np.insert(M, 1, insert_col, axis=1) print(new_M) # 输出: # [[1 5 2] # [3 6 4] # [7 9 8]]
为什么你之前的操作会出问题?
大概率是你用了普通Python列表的insert()方法来操作Numpy数组,或者没有处理好维度匹配。比如把Numpy数组转成列表后调用insert,再转回Numpy数组,就会把插入的列表拆成单个元素,导致整个结构变成一维的混乱数组。而用np.insert()则会严格按照Numpy数组的维度规则来处理插入操作。
内容的提问来源于stack exchange,提问作者Medo
相关产品推荐
相关产品推荐

