我试图在以下条件中通过向量在 MATLAB 中创建矩阵: 矢量是:
v=[a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5]
v是a1,a2,a3,a4,a5元素的向量,在该示例中重复6次。 现在我需要根据这个向量制作一个矩阵,以便:
matrix=
a1 a2 a3
a2 a1 a2
a3 a2 a1
a4 a3 a2
a5 a4 a3
a1 a2 a3
a2 a1 a2
a3 a2 a1
a4 a3 a2
a5 a4 a3
我在矩阵的两个块之间留出间隙来显示概念。
矩阵的第一列是a1,a2,a3,a4,a5(重复两次)。
第二列以a2开头并减少到a1,然后再次增加到a4。所以a2,a1,a2,a3,a4也重复两次。
第三列以a3 ... a1 ... a3开头,并再次重复两次。
所以我需要一个for循环来通过矢量元素v。
来制作这个矩阵感谢您的帮助。
答案 0 :(得分:1)
这是一个相当特殊的排序,所以最好直接定义它。例如:
blockElements=[[1 2 3];[2 1 2];[3 2 1];[4 3 2];[5 4 3]];
matrixElements=[blockElements; blockElements];
然后你想要的矩阵就是:
matrix=v(matrixElements);
请注意,要使其工作,您不需要v重复6次a1 ... a5。如果v被定义为
,它也会起作用v=[a1; a2; a3; a4; a5];
或
v=[a1, a2, a3, a4, a5];
答案 1 :(得分:0)
实际上,我没有看到使用单线函数产生该结果的直接方法;只要元素已经正确放置在向量中,重塑就是一个很好的解决方案......事实并非如此,因此向量中值的重复是有点无用的。最重要的是,当你可以使用straighe索引时,我没有看到使用for循环来实现这个结果。
v = 40:45; % if it's really mandatory you can use repmat(40:45,1,6)
m = [v(repmat(1:5,1,2)).' v(repmat([2 1 2 3 4],1,2)).' v(repmat([3 2 1 2 3],1,2)).'];
m =
40 41 42
41 40 41
42 41 40
43 42 41
44 43 42
40 41 42
41 40 41
42 41 40
43 42 41
44 43 42