在Matlab中将3D Matrix尺寸作为矢量获取

时间:2014-01-23 19:11:06

标签: matlab vector matrix

在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 个答案:

答案 0 :(得分: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;就足够了。)

答案 1 :(得分: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
相关问题