[英]Changing elements of two matrix in a condition matlab
考虑两个n×n-1矩阵和一个n×1向量(例如,以A,B和v的顺序调用它们)。 v的元素为零或一。 如果元素v(m,1)等于1,我想用B(1:m-1,m-1)和元素A(m + 1)替换元素A(1:m-1,m-1) :n,m)乘B(m + 1:n,m)。 我怎样才能做到这一点? 有人可以帮忙吗? 为了使问题更清楚,请考虑以下示例。
例:
A=[1,2,3;4,5,6;7,8,9;12,13,14]
B=[3,4,5;6,7,8;9,10,11;6,5,3]
v=[0,1,0,1]
结果应为:
结果= [3,2,5; 4,5,8; 7,10,11; 12,5,14]
您可以使用find
获得期望的结果,该结果返回非零元素的索引,以及for
循环:
R = A; % assuming you've set A, B and v already.
n = size(A,1);
v1 = find(v);
for i=1:length(v1)
m=v1(i);
if m>1
R(1:m-1,m-1)=B(1:m-1,m-1);
end
if m<n
R(m+1:end,m)=B(m+1:end,m);
end
end
正如我在评论中指出的那样,如果v(n-1)=1
,则v
必须具有n-1
长度,否则m+1:end
不是有效的索引范围。
根据评论进行编辑以进行第二次分配。
这是使用逻辑索引的一种替代方法:
temp = A;
ind = 1:size(v,2);
for k = ind(v==1)
if k<=size(A,2)+1
A(1:k-1,k-1) = B(1:k-1,k-1);
B(1:k-1,k-1) = temp(1:k-1,k-1);
if k<size(A,2)
A(k+1:end,k) = B(k+1:end,k);
B(k+1:end,k) = temp(k+1:end,k);
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.