Matlab计算3D向量子向量范数遇“Input must be 2-D”错误的解决方法
解决Matlab中计算三维数组切片范数的报错问题
我来帮你搞定这个Matlab的报错问题!你遇到的错误是因为x(1,i,:)取出来的是一个1×1×N的三维数组,而Matlab内置的norm函数默认只接受二维矩阵或者一维向量作为输入,所以会提示“Input must be 2-D”。
下面给你几个简单有效的解决方法:
方法一:用
squeeze压缩多余维度squeeze函数的作用是去掉数组中所有长度为1的维度,刚好能把1×1×N的三维数组转换成1×N的一维向量,这样norm就能正常计算了:norm(squeeze(x(1,i,:)))方法二:用
reshape重塑为一维向量
如果你更习惯手动调整维度,可以用reshape把切片转成一维行向量或列向量:% 转成一维行向量 norm(reshape(x(1,i,:), 1, [])) % 或者转成一维列向量 norm(reshape(x(1,i,:), [], 1))方法三:用
vecnorm直接计算高维数组的范数(Matlab R2017b+)
如果你用的是Matlab R2017b及以后的版本,可以用vecnorm函数,它专门支持高维数组,还能指定计算范数的维度,不用调整数组形状:% 沿着第三个维度计算2-范数(默认就是2-范数,第二个参数可以省略) vecnorm(x(1,i,:), 2, 3)
举个实际例子验证一下:假设你有一个3×3×5的三维数组x,当i=1时,x(1,1,:)是1×1×5的数组,用上面任意一种方法都能得到正确的范数结果,不会再报错啦!
内容的提问来源于stack exchange,提问作者user254087
相关产品推荐
相关产品推荐

