Matlab:操纵矩阵并存储它们

时间:2013-10-28 23:52:54

标签: matlab matrix

如何将所有位置值分配给新变量?

A = [ -1   0  -2   0   0
       2   8   0   1   0
       0   0   3   0  -2
       0  -3   2   0   0
       1   2   0   0  -4];

  a=size(A);
  b=size(A);
  c=0;
  position=0;
  for i=1:a 
      for j=1:b 
          if A(i,j) ~=0
              c=c+1;
              position=position+1;
              S(c,:)=[position,i,j,A(i,j)];
          end
      end
  end

结果: S =

 1     1     1    -1
 2     1     3    -2
 3     2     1     2
 4     2     2     8
 5     2     4     1
 6     3     3     3
 7     3     5    -2
 8     4     2    -3
 9     4     3     2
10     5     1     1
11     5     2     2
12     5     5    -4

喜欢的东西 位置= 1 2 3 4 五 6 7 8 9 10 11 12

对于我来说同样的事情

2 个答案:

答案 0 :(得分:2)

我认为你可以通过find function

为自己省去很多悲伤
A = [ -1   0  -2   0   0
       2   8   0   1   0
       0   0   3   0  -2
       0  -3   2   0   0
       1   2   0   0  -4];

[I,J,V] = find(A);

(i,j)I中的非零元素的J位置分别放在V中。如果您真的想要position向量,可以使用position = 1:length(V);创建它。

答案 1 :(得分:0)

在你的代码中,你总是有c=position,所以一个人必须是多余的。在循环结束时,您可以通过执行position来提取S(:,1)的值,这会给出S的第一列。同样,您可以通过i获取S(:,2)的值。那是你在找什么?