我在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,如果A
像B
这样的数字,输出将是6作为第2行,第3个元素数是6。
任何人都可以帮助我
现在我已经创建了这段代码
B=[2 3]
但只有在我的数组中定义了元素时,此代码才有效。我不想在我的数组中定义数字,只想为数组A=[2 3];
B=[1 1];
x=B(1);
y=B(2);
out=A(x,y);
分配限制。
答案 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));