gpt4 book ai didi

matlab - 重新格式化和/或转置为单一维度

转载 作者:行者123 更新时间:2023-12-02 07:08:08 24 4
gpt4 key购买 nike

假设我有一个非空向量 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;

有没有更有效的方法来做到这一点?或者这是最有效的方法?

推论:是否有一个类似“转置”的函数可以将向量转置为单维?也就是说,如果 transpose()将行向量整形为列向量,反之亦然,是否有一个函数可以将行/列向量整形为单一维度并返回?

提前致谢!

最佳答案

第一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 语法。

关于matlab - 重新格式化和/或转置为单一维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31704845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com