我正在努力编写代码来替换矩阵中的特定值。
我有一个矩阵C,它包含多个[r,c,v]值。我现在想要使用这些坐标将矩阵X中的值替换为矩阵Y-中的值,但仅在矩阵c中的坐标处。在不在矩阵c中的坐标处,我想保留矩阵X中的值。
作为我想要做的一个简单例子:
o1= [ 123 123 123; 123 255 123; 255 123 123];
o2= [ 4 4 4; 4 4 4; 4 4 4];
d1= [111 111 111; 111 255 111; 111 111 111];
d2= [5 5 5; 5 5 5; 5 5 5];
o_p= o1;
d_p= d1;
需要找到o_p和d_p中的坐标,其中值等于255
[r,c,v] = find(o_p==255);
a= [r, c, v];
[r,c,v] = find(d_p==255);
b= [r, c, v];
c= [a; b];
然后我想用c中的坐标分别用o2和d2替换两个矩阵中这些坐标处的元素
答案 0 :(得分:1)
问题并不完全清楚,但我会做出一些假设,并希望解决方案接近您所寻找的目标。
% Example
x = rand(12,12);
y = ones(12,12);
% Assume c = [x,y]
c = [1 1; 2 2; 3 3; 4 4]; % Pick a few arbitrary points on the diagonal
x(sub2ind(size(x),c(:,1),c(:,2))) = y(sub2ind(size(x),c(:,1),c(:,2)))
为了在一行中执行此操作,您可以利用MATLAB如何将值存储在内存中。因为MATLAB在技术上将矩阵存储在单个列中,所以可以使用1D索引而不是nD坐标访问矩阵中的任何值。 sub2ind
允许您根据矩阵的输入坐标和大小获取这些索引,然后您可以使用这些索引在矩阵之间交换值。
答案 1 :(得分:0)
你是说在[o_p 和 d_p]或[o_p 或 d_p]中都有255?
如果和试试这个 -
ind1 = find((o_p==255) & (d_p==255))
如果或尝试此操作 -
ind1 = find((o_p==255) | (d_p==255))
然后再做 -
o2(ind1)=d2(ind1)
希望这就是你所追求的!