2013-12-23 53 views
0

在Matlab中是否有函數按塊分配矩陣元素?例如: 矩陣A =Matlab矩陣操作

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對應於1中的矩陣A的元素轉到矩陣C(在相同位置),類似於矩陣B中對應於矩陣A中的2的元素進入矩陣C(在相同位置)等等。

回答

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 
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