【问题标题】:Extracting array element in MATLAB在MATLAB中提取数组元素
【发布时间】:2013-12-12 23:59:46
【问题描述】:

关于 Matlab 中的数组,我需要一点帮助。

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

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

现在我正在制作一个返回 1 的公式,如果我的数组 B 有数字 1 和 1 并且 A 的第一行和第一列有 1 ,如果 B 有像 B=[2 3] 这样的数字,第 2 行输出为 6,第 3 个元素编号为 6。

谁能帮帮我

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

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

out=A(x,y);

但只有当我在数组中定义了元素时,此代码才有效。我不想在我的数组中定义数字,只想为数组分配限制A

【问题讨论】:

  • 您是否尝试预先分配数组的大小?如果是这样,请尝试A = zeros(2,3)
  • "我不想定义数组中的数字,我只想给数组 A 赋值" --> 你能解释清楚点吗?
  • @Luis Mendo:我的意思是我只是在定义一个数组 A 的大小,它将在其中包含最大 2x3=6 个元素,所以实际上它会有 1-6 的数字,如果我将 A 定义为 [4 4] 那么它将具有 1-16 (4x4=16) 的数字。这只是数组的最大限制,我将其视为从 1 到数组的最大限制。在第二个数组中,我使用索引打印特定行和列的数字

标签: matlab


【解决方案1】:

使用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

【讨论】:

  • 谢谢,我的意思是我只是定义一个数组 A 的大小,它将包含最多 2x3=6 个元素,所以实际上它会有 1-6 的数字,如果我定义 A作为 [4 4] 那么它将具有 1-16 (4x4=16) 的数字。这只是数组的最大限制,我将其视为从 1 到数组的最大限制。在第二个数组中,我使用索引打印特定行和列的数字正如您在数组中定义的数字一样,我不想在数组中定义数字
【解决方案2】:

你可以这样做:

一个班轮,我不推荐它,原因有两个: 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】:

    我认为您需要以下内容:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      相关资源
      最近更新 更多