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(在相同位置),依此类推。
答案 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