matlab 矩阵矩阵元素替换

问题描述:

matlab 矩阵矩阵元素替换
有一行矩阵w=[1,0,1,1...,0],里面有n个1元素,其他元素全为0.同时还有行矩阵p=[5,6,2...7],元素个数为n,就是w里面1的个数.现在想把w矩阵里元素为1的位置替换成p矩阵的元素,p的第一列替换第一个1,第二列元素替换第二个1,以此类推.
1个回答 分类:综合 2014-11-19

问题解答:

我来补答
首先编写m函数如下:
function out = replace(w,p)
temp_h=length(w);
l=1;
for k=1:temp_h
    if w(k)==1
        out(k)=p(l);
        l=l+1;
    else
        w(k)=0;
    end
end
end
然后将该m函数放到matlab工作目录下,或改变matlab工作目录到该函数的目录.
在命令空间输入如下命令:
>> m=[0,1,1,0,1];
>> p=[3,5,9];
>> a=replace(m,p)

a =

     0     3     5     0     9
看到了吧,a就是m矩阵中将1对应的用p的元素替换后的矩阵.
再问: 只能用for循环了么?还有没有其他办法?
再答:     矩阵操作的效率确实比for循环的效率高,但是你这个题中矩阵内的规律不是很明显。很难实现矩阵操作。你可以从最原始的算法上改改看。    这里我将我的算法优化了一下,将m函数改写如下:function out = replace_2(w,p)
temp_1=find(w==1);       %找到w中为1的元素标号
temp_2=length(temp_1);  %判断为1的元素个数
temp_3=length(w);       %判断w的列数
out=zeros(1,temp_3);
for k=1:temp_2
    out(temp_1(k))=p(k);
end
end 这个函数for循环的次数为w向量中1的个数,刚刚我给的算法for循环的次数为w的列数。而且还剩去了多次的if判断,可以看出效率可以明显提高。在命令空间输入以下内容测试:>> w=[0 1 1 0 0 1 1];
>> p=[1 5 7 3];
>> a=replace_2(w,p)
a =
     0     1     5     0     0     7     3函数功能也可实现。
 
 
展开全文阅读
剩余:2000