NumPy中如何将单行矩阵转为数组?及将(1,3)矩阵转为(3,)向量?
嘿,我来帮你搞定这两个NumPy的小问题,都是矩阵转数组/向量的常见小坑,咱们一个个说~
1. 在NumPy中,如何将单行矩阵转换为数组?
单行矩阵本质还是二维结构(比如形状是(1, n)),如果只是转成数组,直接用np.asarray()或者np.array()就能得到二维数组,但如果你想要一维数组(形状(n,)),可以用这些方法:
- 用
squeeze()去掉长度为1的冗余维度:import numpy as np m = np.matrix([[1, 2, 3]]) arr = np.squeeze(m) # arr的形状是(3,) - 用矩阵的
A1属性(矩阵对象专属,直接返回扁平化的一维数组):arr = m.A1 - 用
ravel()或flatten()扁平化:arr = np.ravel(m) # 返回原数据的视图,修改可能影响原矩阵 # 或者 arr = m.flatten() # 返回副本,修改不影响原矩阵
2. 将形状(1,3)的矩阵转换为(3,)的真正向量
你提到v = m[0] + m[1]得到的是形状(1,3)的矩阵,用np.asarray(v)和np.array(v)后还是二维数组,这很正常——因为这两个方法只是把矩阵包装成数组,但不会自动降维。要得到一维向量,试试这些方法:
- 最直观的:用
squeeze()v = np.matrix([[5, 7, 9]]) vec = np.squeeze(v) print(vec.shape) # 输出(3,) - 矩阵专属的
A1属性vec = v.A1 print(vec.shape) # 输出(3,) - 用
reshape(-1)强制降维vec = v.reshape(-1) # -1让NumPy自动计算维度,这里就会变成(3,) - 用
ravel()扁平化vec = np.ravel(v)
简单来说,核心就是把二维矩阵里那个多余的长度为1的维度去掉,就能得到你想要的一维向量啦~
内容的提问来源于stack exchange,提问作者Fabien
相关产品推荐
相关产品推荐

