2014-01-23 166 views
3

一個向量在Matlab中,如果我有一個3D矩陣如下: -獲取3D矩陣維度在Matlab

>> 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進行一些修改,將生成的向量存回int o 3D Matrix T

我想以矢量化的方式做到這一點,如果可能的話。

回答

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 
+0

我忘了'擠'。適合在這裏創建一個行向量。 – chappjc

+0

@Daniel R謝謝,我非常喜歡這個。 –

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;就足夠了)。

+0

對於行向量,你也可以使用'squeeze':'squeeze(T(1,1,:))' –

+0

@LuisMendo真 - 我看到Daniel給出了這個選項。我自己,我喜歡明確指定維度,主要是爲了可讀性,但也爲了避免可能的錯誤。 – chappjc

+0

@chappjc非常感謝您的答覆和解決方案。不過,我確實很喜歡'擠壓'選項。所以,雖然這是一個很好的解決方案,但我認爲我會接受丹尼爾斯的回答。 –