【问题标题】:MATLAB: How can I properly work with index values in a meshgrid?MATLAB:如何正确使用网格网格中的索引值?
【发布时间】:2014-08-24 00:09:07
【问题描述】:

假设我有两个向量( 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 使用了一个网格来获取这些值的所有可能对,并创建了一个新数组 ( 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(find(R

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

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

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

【问题讨论】:

  • 我能够解决我的问题。还是谢谢!
  • @HelP - awww....我刚刚为你解决了:(。你能检查一下我的解决方案是否正确吗?
  • @rayryeng 是的,你是对的,伙计!感谢您的时间和帮助;)
  • @HelP - 啊哈!我的荣幸伙计:)。不过,我很高兴您自己解决了这个问题。这些是最好的胜利。感谢您接受我的回答:)

标签: arrays matlab indexing mesh


【解决方案1】:

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

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

row_R6 将存储行位置,col_R6 将这些值的列位置存储在R 中,其值为&lt; 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

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多