如何将四个1×3行向量拼接为4×3矩阵?现有代码求助
问题解决:拼接1×3行向量为4×3矩阵
你的代码报错是因为ul、ur等都是一维数组(shape为(3,)),而np.concatenate指定axis=1时,要求输入数组至少有2个维度,一维数组不存在axis=1,所以会触发错误。
以下是几种可行的解决方法:
方法1:直接用np.array包裹数组列表
这是最简洁的方式,numpy会自动将一维数组堆叠成二维矩阵:
import numpy as np ul = np.array([-320, 240, 1]) ur = np.array([320, 240, 1]) br = np.array([320, -240, 1]) bl = np.array([-320, -240, 1]) corners = np.array([ul, ur, br, bl]) print(corners)
方法2:使用np.vstack垂直堆叠
vstack专门用于垂直拼接数组,自动处理一维数组的维度适配:
import numpy as np ul = np.array([-320, 240, 1]) ur = np.array([320, 240, 1]) br = np.array([320, -240, 1]) bl = np.array([-320, -240, 1]) corners = np.vstack([ul, ur, br, bl]) print(corners)
方法3:先将一维数组转为二维,再用concatenate
给每个数组增加一个维度(变成(1,3)的二维数组),再用axis=0拼接:
import numpy as np ul = np.array([-320, 240, 1]) ur = np.array([320, 240, 1]) br = np.array([320, -240, 1]) bl = np.array([-320, -240, 1]) corners = np.concatenate([ul[np.newaxis, :], ur[np.newaxis, :], br[np.newaxis, :], bl[np.newaxis, :]], axis=0) print(corners)
以上三种方法都能得到你期望的4×3矩阵输出:
[[-320 240 1] [ 320 240 1] [ 320 -240 1] [-320 -240 1]]
内容的提问来源于stack exchange,提问作者Nick X Tsui
相关产品推荐
相关产品推荐

