MATLAB:如何在meshgrid中正确使用索引值?

时间:2014-08-24 00:09:08

标签: arrays matlab indexing mesh

让我们说我有两个向量(Elem和Dren)。 Dren中的每一行代表Elem中可能的元素组合的总和。 ID是一个与Dren具有相同行数的数组,并存储与Dren中每行对应的Elem索引。

示例:

Elem = [3 2 6];
Dren = [3; 2; 6; 5; 9; 8; 11];
ID = [  1     0     0;
    2     0     0;
    3     0     0;
    1     2     0;
    1     3     0;
    2     3     0;
    1     2     3];

然后我使用了Elem和Dren的meshgrid来获取这些值的所有可能对并创建了一个新的数组(R)及其比率,如下所示:

[E,D]=meshgrid(Elem,Dren);
for line=1:size(E,1)
   for col=1:size(E,2)
      R(line,col)=D(line,col)./E(line,col);
   end
end

这给了我:

R =
1.0000e+000  1.5000e+000  5.0000e-001
6.6667e-001  1.0000e+000  3.3333e-001
2.0000e+000  3.0000e+000  1.0000e+000
1.6667e+000  2.5000e+000  8.3333e-001
3.0000e+000  4.5000e+000  1.5000e+000
2.6667e+000  4.0000e+000  1.3333e+000
3.6667e+000  5.5000e+000  1.8333e+000

我已经过滤了R的结果,并选择了低于6的结果,所以我得到了:

R6 = R(find(R<6))

R6 =
1.0000e+000
6.6667e-001
2.0000e+000
1.6667e+000
3.0000e+000
2.6667e+000
3.6667e+000
1.5000e+000
1.0000e+000
3.0000e+000
2.5000e+000
4.5000e+000
4.0000e+000
5.5000e+000
5.0000e-001
3.3333e-001
1.0000e+000
8.3333e-001
1.5000e+000
1.3333e+000
1.8333e+000

现在我想创建一个新数组,它将这些过滤值存储在第一列中,并显示ID等于它们的行值。换句话说,第一列将是R(找到(R <6),而其他列将是与每个R计算中使用的Dren值相关的Elem索引。因为我在R中使用了find函数,所以我没有&#39 ; t知道如何关联正确的ID行。

例如,对于R6(1,1)= 1.0000e + 000,我们知道它是从D(1,1)= 3计算的,因此相应的ID行是[1 0 0]。因此,数组的第一行是:

Store(1,:) = [ 1.0000e+000 1     0     0 ]

如何为R6中的所有元素执行此操作?

1 个答案:

答案 0 :(得分:0)

这很容易解决。你应该做的是使用find两个输出版本。

[row_R6, col_R6] = find(R<6);

row_R6将存储行位置,col_R6会将这些值的列位置存储在R中,其值为< 6。然后,您可以使用row_R6索引ID矩阵以获取正确的行。就这样:

format long
Store = [R6 ID(row_R6,:)] %// R6 created a priori

我们得到:

Store =

1.000000000000000   1.000000000000000                   0                   0
0.666670000000000   2.000000000000000                   0                   0
2.000000000000000   3.000000000000000                   0                   0
1.666700000000000   1.000000000000000   2.000000000000000                   0
3.000000000000000   1.000000000000000   3.000000000000000                   0
2.666700000000000   2.000000000000000   3.000000000000000                   0
3.666700000000000   1.000000000000000   2.000000000000000   3.000000000000000
1.500000000000000   1.000000000000000                   0                   0
1.000000000000000   2.000000000000000                   0                   0
3.000000000000000   3.000000000000000                   0                   0
2.500000000000000   1.000000000000000   2.000000000000000                   0
4.500000000000000   1.000000000000000   3.000000000000000                   0
4.000000000000000   2.000000000000000   3.000000000000000                   0
5.500000000000000   1.000000000000000   2.000000000000000   3.000000000000000
0.500000000000000   1.000000000000000                   0                   0
0.333330000000000   2.000000000000000                   0                   0
1.000000000000000   3.000000000000000                   0                   0
0.833330000000000   1.000000000000000   2.000000000000000                   0
1.500000000000000   1.000000000000000   3.000000000000000                   0
1.333300000000000   2.000000000000000   3.000000000000000                   0
1.833300000000000   1.000000000000000   2.000000000000000   3.000000000000000