在Matlab中将3D矩阵的维度作为向量获取

3
在Matlab中,如果我有一个如下的3D矩阵:-
>> T = rand(4,4,3)

T(:,:,1) =

    0.3214    0.0986    0.4552    0.4033
    0.2283    0.8989    0.7460    0.8627
    0.9535    0.5170    0.6831    0.6013
    0.1657    0.7017    0.9876    0.9445


T(:,:,2) =

    0.5260    0.2102    0.2393    0.9158
    0.8759    0.2099    0.5677    0.4351
    0.5829    0.5325    0.9171    0.7946
    0.5918    0.6938    0.0176    0.0641


T(:,:,3) =

    0.7209    0.7310    0.8726    0.0960
    0.3021    0.1482    0.0549    0.2180
    0.2190    0.4476    0.4889    0.5725
    0.7653    0.3743    0.9298    0.1413

“我想要获取维度中的所有元素(1,1,:),应该怎么做?”
“我尝试了以下方法:-”
t = T(1,1,:)

但它产生的是:-
t(:,:,1) =

    0.3214


t(:,:,2) =

    0.5260


t(:,:,3) =

    0.7209

然而,我希望将这些值作为向量执行矢量积运算,就像这样:-
t = [0.3214, 0.5260, 0.7209]
v2 = t*v'

然后对 t 进行一些修改,将结果向量存储回 3D 矩阵 T 中。
如果可能的话,我希望以向量化的方式完成此操作。
2个回答

4

reshape:

t = reshape(T(1,1,:),1,[]);

或者使用permute函数:

t = permute(T(1,1,:),[1 3 2])

以上两个选项都会给出一个行向量。如果需要列向量,则可以使用以下代码:t = reshape(T(1,1,:),[],1);t = permute(T(1,1,:),[3 2 1])

不需要匹配维度即可写回(例如,T(1,1,:) = v2;即可)。


对于行向量,您也可以使用squeezesqueeze(T(1,1,:)) - Luis Mendo
@LuisMendo 确实 - 我看到Daniel给出了那个选项。我个人喜欢明确指定尺寸,主要是为了可读性,也为了避免可能的错误。 - chappjc
@chappjc非常感谢您的回复和解决方案。然而,我真的很喜欢“挤压”选项。因此,尽管这是一对绝妙的解决方案,但我认为我会接受丹尼尔的答案。 - Jack H

4
%get t, removing all singleton dimensions
t=squeeze(T(1,1,:))
%some operations
t=t*rand(1)
%writing t back
T(1,1,:)=t

我忘记了squeeze。在此制作行向量非常完美。 - chappjc
@Daniel R 谢谢,我非常喜欢这个。 - Jack H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接