2015-05-17 38 views
2

這裏是尺寸6x3x8x5如何使用大小()函數來檢索特定尺寸在Matlab

的例子矩陣A現在,如果我使用size(A),我得到的所有尺寸爲行向量

ans = [6 3 8 5] 

如果我想獲得特定尺寸(單數),我可以使用類似size(A,1)size(A,3)等。

如果我想要指定一組尺寸,例如尺寸爲種3和尺寸或第二第n尺寸

什麼我想要做的是一樣的東西size(A,3:4)size(A,2:n)size(A,[1 3 4])

但從Doc,看來,輸入尺寸大小隻能是一個標量。當我嘗試這樣做,我得到這個錯誤:

>> size(A,[2 3]) 

Error using size
Dimension argument must be a positive integer scalar within indexing range.

我期待的輸出爲

ans = [3 8] 

FYI:

我試着將此作爲輸入參數傳遞給另一個函數,如下所示:

out = someFunction(arg1,arg2,size(A,[2 3])) 

什麼我目前做的是

[~,size2,size3,~] = size(A) 

out = someFunction(arg1,arg2,[size2, size3]) 

我只是想不直接在第一線使用。顯然,當我們只有兩個維度時,我們直接通過做size(A)來使用它。爲什麼不在這種情況下?任何替代品,使這是一個單線?

+1

簡答:是的,這是它的工作原理。我自己看不到兩條線有任何問題。如果你喜歡,你可以創建你自己修改的'size'函數,它具有你描述的特性。 – horchler

+1

可能的重複[如何索引一個函數返回的MATLAB數組而不先分配給本地變量?](http://stackoverflow.com/questions/3627107/how-can-i-index-a-matlab -array-by-a-function-without-first-assigning-it) – thewaywewalk

+0

@thewaywewalk,雖然這些解決方案解決了我的問題,但問題卻有點不同嗎? –

回答

4

這就是編寫size的方式。

如果你想要一個一行,就可以使用subsref索引的size單輸出形式:

out = someFunction(arg1,arg2,... 
       subsref(size(A),struct('type','()','subs',{{[2,3]}}))); 

如果你打算做這個有很多,地方增加一個功能Matlab的路徑或上做出行一個:

sizes = @(A,dims) subsref(size(A),struct('type','()','subs',{{dims}})); 
out = someFunction(arg1,arg2,sizes(A,[2,3])); 

您還可以通過一點點間接沒有直接調用創建sizessubsref與函數處理:

getSizes = @(d,s) d(s); 
sizes = @(A,s) getSizes(size(A),s); 

這可能更清楚和更易於維護。

+0

工程很棒:) +1我仍然不明白'subsref'函數,即使在閱讀文檔之後。它是如何工作的?你能否詳細說明一下? –

+1

@SanthanSalai基本上,'subsref'是每當索引數組時調用的函數。因此,如果我們有一個矩陣'A'並將其索引爲'a15 = A(1,5)',Matlab的解釋器/編譯器(類型)將其轉換爲'a15 = subsref(A,struct('type','( )','subs',{{[1,5]}}))'在背景中。 – TroyHaskin

+0

這是有道理的,所以對於'size'函數,你正在手動執行,因爲MatLab本身並不這麼做..我是對嗎? –

3

兩個Troy Haskin's answers和我是從這個問題借來的:How can I index a MATLAB array returned by a function without first assigning it to a local variable?我個人覺得適當的getfield方法對你的情況,你只是包裝getfield在你size功能:

A = randn(1,2,3,4,5); %// 5D double 

out = getfield(size(A),{[2 3]}) 

out = 

    2  3 

使用subsref可能是更直接和更快的更好的方法,但它可能會使您的代碼更不可讀,因爲它非常具體。

+0

是啊..'getfield'更具可讀性。也感謝您鏈接原始問題。 :) –

+0

不錯。我現在感覺很傻,現在不在尋找這個。 – TroyHaskin

相關問題