我们说我有一个非空的向量z
。
我想将此矢量复制并塑造成尺寸为[r, c, length(z)]
的矩阵。
例如:
z = 1:5;
r = 3;
c = 3;
我正在寻找能给我的功能:
ans(:, :, 1) =
[ 1 1 1 ]
[ 1 1 1 ]
[ 1 1 1 ]
ans(:, :, 2) =
[ 2 2 2 ]
[ 2 2 2 ]
[ 2 2 2 ]
...
ans(:, :, 5) =
[ 5 5 5 ]
[ 5 5 5 ]
[ 5 5 5 ]
注意: 做点什么
tmp = zeros(r,c,length(z));
tmp = repmat(z, 3, 3, 1);
不起作用。相反,它返回15x15矩阵作为
tmp =
[ 1:5, 1:5, 1:5 ]
[ 1:5, 1:5, 1:5 ]
[ 1:5, 1:5, 1:5 ]
不是我想要的。
首先转置z
也不起作用。
我知道的唯一解决方案是最初将z
设置为向量的第三维:
z(1,1,:) = 1:5;
有更有效的方法吗?或者这是最有效的方法吗?
COROLLARY:是否有一个"转置"类似的函数将向量转换为单一维度?也就是说,如果transpose()
将行向量整形为列向量,反之亦然,那么是否有一个函数可以将行/列向量整形为单个维度并返回?
提前致谢!
答案 0 :(得分:3)
首先permute
向量,使其成为单个3D向量,然后使用repmat
:
z = permute(1:5, [1 3 2]);
r = 3; c = 3;
out = repmat(z, [r c]);
我们得到:
>> out
out(:,:,1) =
1 1 1
1 1 1
1 1 1
out(:,:,2) =
2 2 2
2 2 2
2 2 2
out(:,:,3) =
3 3 3
3 3 3
3 3 3
out(:,:,4) =
4 4 4
4 4 4
4 4 4
out(:,:,5) =
5 5 5
5 5 5
5 5 5
permute
通过改变输入向量的维度来工作。我们在这里做的是我们切换列值,使它们出现在单个3D矢量的切片中。然后,我们将此3D矢量复制为任意数量的行和任意数量的列。
如果permute
令人困惑,那么假设尚未分配z
,您也可以这样做:
z(1,1,:) = 1:5;
然后,您可以继续使用此z
,并使用我之前谈到的repmat
语法。
答案 1 :(得分:3)