在matlab中的特定坐标处替换矩阵的元素

时间:2014-04-17 16:21:07

标签: matlab matrix

我正在努力编写代码来替换矩阵中的特定值。

我有一个矩阵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替换两个矩阵中这些坐标处的元素

2 个答案:

答案 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)

希望这就是你所追求的!