matlab 矩阵矩阵元素替换

有一行矩阵w=[1,0,1,1...,0],里面有n个1元素,其他元素全为0.同时还有行矩阵p=[5,6,2...7],元素个数为n,就是w里面1的个数。现在想把w矩阵里... 有一行矩阵w=[1,0,1,1...,0],里面有n个1元素,其他元素全为0.同时还有行矩阵p=[5,6,2...7],元素个数为n,就是w里面1的个数。现在想把w矩阵里元素为1的位置替换成p矩阵的元素,p的第一列替换第一个1,第二列元素替换第二个1,以此类推。
急求!
展开
 我来答
百度网友90cfdc5
高粉答主

2020-02-15 · 关注我不会让你失望
知道答主
回答量:86
采纳率:100%
帮助的人:1.3万
展开全部

1、首先我们打开matlab,在命令行窗口中输入a=[120155;2407;2300;0000]。

2、输入a(find(a==0))=[],去除掉a矩阵内的0元素。

3、按回车键之后,可以看到已经去除了a矩阵所有的0元素,并变成了1行数据。

4、如果我们想去除矩阵的全0行的话,输入a(all(a==0,2),:)=[]。

5、按回车键之后,可以看到删除了矩阵的第5行全0行。

扩展资料:

在matlab中,矩阵中的元素序号是按照“先行后列”的顺序排列的。设如下随机矩阵:A=rand(4,6)A=0.65510.95970.75130.89090.14930.81430.16260.34040.25510.95930.25750.24350.11900.58530.50600.54720.84070.92930.49840.22380.69910.13860.25430.3500则执行下面命令:A(6)ans=0.3404得到结果很容易看出是按照“先行后列”的排序。其次,对于矩阵中的元素表示方法,主要分以下几点:

1、A(m,n)代表矩阵A中第m行,第n列的值:A(3,4)ans=0.5472。

2、对于矩阵A(m,n)若是m用:代替即A(:,n)代表第n列的元素;若是n用:代替即A(m,:)代表第m行元素;A(2,:)ans =0.1626 0.3404 0.2551 0.9593 0.2575 0.2435若是用[a b c]代替m即A([a b c],n)则表示第a,b,c行,n列中的元素;A(:,6)ans =0.81430.24350.92930.3500若是用[a:b](a<b)代表m即A(a:b,:)

则表示a到b行的所有元素;A(2:4,:)ans=0.16260.34040.25510.95930.25750.24350.11900.58530.50600.54720.84070.92930.49840.22380.69910.13860.25430.3500若是用[abc]代替m,用[xy]代替n即A([abc],[xy])则表示a,b,c行中x,y列中的元素;A([1,3],5)ans=0.14930.8407。

吓栋栋
推荐于2017-11-26 · TA获得超过2833个赞
知道小有建树答主
回答量:386
采纳率:100%
帮助的人:197万
展开全部

首先编写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

函数功能也可实现。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
涂智华
2014-02-14 · 知道合伙人教育行家
涂智华
知道合伙人教育行家
采纳数:603 获赞数:1805
数学竞赛获奖选手

向TA提问 私信TA
展开全部
以下面为例,其余类推。
w=[1 0 1 1 0 0 0 1 1 1 0];
p=[5 6 2 8 9 7];
k=1;%记录p中元素位置
for i=1:length(w)
if w(i)==1
w(i)=p(k);
k=k+1;
end
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式