【问题标题】:Matlab: Manipulation of Matrix and Storing themMatlab:矩阵的操作和存储
【发布时间】:2013-10-29 08:11:11
【问题描述】:

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

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 5 6 7 8 9 10 11 12

我也一样

【问题讨论】:

  • 您要提取S 的第一列吗?只需position = S(:,1)'

标签: matlab matrix


【解决方案1】:

我认为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)的非零元素的位置分别放在IJ中,值在V中。如果你真的想要position 向量,你可以用position = 1:length(V); 创建它。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多