2013-12-12 69 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指定的范围内,这只会失败)。