Matlab矩阵操作

时间:2013-12-23 16:51:38

标签: matlab

Matlab中是否有一个函数可以按块分配矩阵元素?例如: 矩阵A =

 1     1     3     3     3     3     3     8     8    10
 1     1     3     3     3     3     3     8     8    10
 1     1     4     4     4     4     4     8     8    10
 1     1     4     4     4     4     4     8     8    10
 1     1     5     5     5     5     5     8     8    10
 2     2     5     5     5     5     5     9     9    10
 2     2     6     6     6     6     6     9     9    10
 2     2     6     6     6     6     6     9     9    10
 2     2     7     7     7     7     7     9     9    10
 2     2     7     7     7     7     7     9     9    10

矩阵B =

 1     1     1     1     1     1     1     1     1     1
 2     2     2     2     2     2     2     2     2     2
 3     3     3     3     3     3     3     3     3     3
 4     4     4     4     4     4     4     4     4     4
 5     5     5     5     5     5     5     5     5     5
 6     6     6     6     6     6     6     6     6     6
 7     7     7     7     7     7     7     7     7     7
 8     8     8     8     8     8     8     8     8     8
 9     9     9     9     9     9     9     9     9     9
10    10    10    10    10    10    10    10    10    10

用户想要创建另一个矩阵C,其中矩阵B中对应于矩阵A中的1的元素到达矩阵C(在相同位置),类似矩阵B中对应于矩阵中的2的元素A转到矩阵C(在相同位置),依此类推。

2 个答案:

答案 0 :(得分:2)

使用Matlab运算符(在这种情况下为==)非常简单,并且您不需要函数。

A == 1将返回A(或B)的所有索引,其中A等于1作为布尔矩阵:

>> A == 1

ans =

     1     1     0     0     0     0     0     0     0     0
     1     1     0     0     0     0     0     0     0     0
     1     1     0     0     0     0     0     0     0     0
     1     1     0     0     0     0     0     0     0     0
     1     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0

然后B(A == 1)将返回上面结果的所有真实元素,在B中(以矢量形式):

>> B(A == 1)

ans =

     1
     2
     3
     4
     5
     1
     2
     3
     4
     5

所以你需要的是将C(A == n)等同于B(A == n)

C = zeros(size(B)); % Create a matrix C with proper size

for k = 1:10
   inds = A == k; % indices of A, B or C that correspond to A == k
   C(inds) = B(inds);
end

答案 1 :(得分:0)

不确定我是否理解正确,但你是否正在尝试做类似的事情?

C = zeros(size(A));
for k=1:10
   C(B==k) = A(B==k); % or is it C(A==k) = B(A==k) ?
end
相关问题