在MATLAB中提取数组元素

时间:2013-12-12 23:59:46

标签: matlab

我在Matlab中对数组的帮助不大。

假设我定义了一个数组A=[2 3],这意味着我的数组最多有6个元素,我用B=[1 1]定义另一个数组,这意味着数组{{第1行和第1列的元素1}}。

我的数组A将始终具有从1到数组最大限制的数字,就像在当前cas中它的2x3 = 6所以最大数字将是6,元素将从1-6开始。问题是我不会在我的数组中定义这些数字,我会假设它。

现在我正在制作一个重新生成1的公式,如果我的数组A的数字为1和1,B的第1行和第1列的数字为1,如果AB这样的数字,输出将是6作为第2行,第3个元素数是6。

任何人都可以帮助我

现在我已经创建了这段代码

B=[2 3]

但只有在我的数组中定义了元素时,此代码才有效。我不想在我的数组中定义数字,只想为数组A=[2 3]; B=[1 1]; x=B(1); y=B(2); out=A(x,y); 分配限制。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我认为您需要以下内容:

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

但是,您可以为问题提供更清晰的解释。 (ofc,如果B的元素不在A指定的范围内,这将失败。)

答案 2 :(得分: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));