2013-12-12 71 views
-1

在Matlab中我需要一些關於數組的幫助。在MATLAB中提取數組元素

設說我定義一個數組A=[2 3],這意味着我的陣列具有最大6個元件和我定義與B=[1 1]另一個陣列,這意味着在陣列A上第一行第一列中的元素。

我的數組A將始終有數字從1到數組的最大限制,就像在當前cas中它是2x3 = 6,因此最大數字將是6,元素將從1-6開始。問題是我不會在我的數組中定義這些數字,我會假設它。

現在我正在做的是regurns 1公式,如果我的陣列B有數字1和1,第1行的A有1個第1列,如果B有一個像B=[2 3]號碼,輸出將6作爲第二排和第三單元數量爲6

誰能幫助我

現在我有這個裝箱代碼

A=[2 3]; 
B=[1 1]; 
x=B(1); 
y=B(2); 

out=A(x,y); 

但如果我甲肝這段代碼只會工作在我的數組中定義了元素。我不想在我的數組中定義數字,只想分配數組A

+0

你們是不是要預分配數組的大小?如果是這樣,請嘗試'A =零(2,3)'。 – Justin

+0

「我不想在我的數組中定義數字,我只是想給數組A指定極限」 - >您能更清楚地解釋一下嗎? –

+0

@Luis Mendo:我的意思是我只是定義一個數組A的大小,它將包含最大2x3 = 6個元素,所以實際上它會有1-6個數字,如果我將A定義爲[4 4]那麼它將具有1-16(4x4 = 16)的數字。這只是數組的最大限制,我會認爲它是從1到數組的最大限制。在第二個數組中,我使用索引來打印該特定行和列的數字 – user2828488

回答

1

你可以做到這一點是:

一個襯墊,我不建議有兩個原因:1,代碼應該是易於閱讀。 2. subsref通常用於覆蓋運營商{},(), .而不是用於此類任務。

C=subsref(reshape(1:A(1)*A(2),A(1),A(2)),struct('type','()','subs',{{B(1),B(2)}})) 

或者,

C=reshape(1:(A(1)*A(2)),A(1),A(2)); 
out1=C(B(1),B(2)); 
3

使用sub2ind

A(sub2ind(size(A), B(:,1), B(:,2))) 

例子:

>> A = [1 2; 3 4; 5 6]; 
>> B = [1 1; 3 2]; 
>> A(sub2ind(size(A), B(:,1), B(:,2))) 
ans = 
    1 
    6 
+0

謝謝,我的意思是我只是定義了一個數組A的大小,它將包含最大2x3 = 6個元素,所以實際上它將具有1-6的數字,如果我將A定義爲[4 4],則它將具有1-16(4x4 = 16)的數字。這只是數組的最大限制,我會認爲它是從1到數組的最大限制。而在第二個數組中,我使用索引來打印該特定行和列處的數字 正如您在數組中定義數字一樣,我不想在數組中定義數字 – user2828488

1

我認爲你需要像下面這樣:

out = A(2)*(B(1)-1) + B(2) 

你可以爲這個問題更清楚的解釋,雖然。 (ofc,如果B的元素不在由A指定的範圍內,這隻會失敗)。