繁体   English   中英

条件矩阵中两个矩阵的更改元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM