Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-03-26, 09:00   #1
appleceo
初级会员
 
注册日期: 2009-02-05
年龄: 45
帖子: 1
声望力: 0
appleceo 正向着好的方向发展
默认 [求助]如何把一个包含0和1的矩阵中的相邻的1都加起来

大家好,我有一个只包含0和1的矩阵,0和1的位置是任意的。例如a=[0 0 0 1 1 0 1 1 1 1 0;1 1 1 1 0 0 0 0 0 1 1;1 1 1 1 1 0 1 1 1 1 1;0 0 0 0 0 1 0 0 0 1 0;1 0 1 0 1 0 1 0 1 1 1]; 我想把矩阵中被0间隔的连续的1分别加起来,把和输入到另一个矩阵。例如a加完以后位b=[2 4;4 2;5 5;1 1;1 1 1 1 3]. 请问应如何做。谢谢了。
appleceo 当前离线   回复时引用此帖
旧 2009-03-26, 23:19   #2
silas_xue
高级会员
 
注册日期: 2008-11-01
年龄: 39
帖子: 406
声望力: 26
silas_xue 是一个将要出名的人
默认 回复: [求助]如何把一个包含0和1的矩阵中的相邻的1都加起来

lz 你是希望有库函数完成这个解答么?
如果不是的话 用循环和条件语句就应该可以完成吧
pseudo:
for 像素列/行循环
if 当前元素为1
if 前一元素为0
if 后一元素为1
then 相加
end if
end if
end if
if 当前元素为1
if 前一元素为1
if 后一元素为0
then 停止相加
end if
end if
end if
end for

写的比较笼统和简单 可以大幅度简化 只是把思路写出来 个人意见 仅供参考

Thx for reading.
PS:若还算满意,直接点击“Thanks”,再次登陆时亦便于查看回答是否真的帮到你了
silas_xue 当前离线   回复时引用此帖
旧 2009-03-27, 21:48   #3
laosam280
高级会员
 
注册日期: 2008-11-07
住址: 湖南长沙
帖子: 233
声望力: 21
laosam280 正向着好的方向发展
默认 回复: [求助]如何把一个包含0和1的矩阵中的相邻的1都加起来

你的这个问题实在不难,但是还是忙活了我一下午。我用c++和matlab写了,但是总体而言matlab更直接,但是c++写出来更快,呵呵,循环太多了,效率不高,仅供你参考。
#include<iostream>
#define M 5
#define N 8
using namespace std;
int main()
{int a[M][N]={{1,0,1,0,1,0,1,1},
{1,0,1,1,1,0,1,0},
{1,0,1,1,1,0,1,1},
{1,0,1,0,1,0,1,0} ,
{1,0,1,0,1,0,1,0}};
}
int max=0;
for(int j=0;j<M;j++)
{
int count=0;
int flag=1;
for(int i=0;i<N;i++)
{
if(a[j][i]==1&&flag)
{ count++; flag=0;}
if(a[j][i]==0)
flag=1;
}
if(max<count)
max=count;
}

for(int i=0;i<M;i++)
{ int CL=0;int k=0;
for(int j=0;j<N;j++)
{

if(a[i][j]==1)
k++;
else
{ if(k!=0)
{ cout<<k<<" "; CL++;
k=0;


}
}
}
if(k!=0)
{ cout<<k<<" "; CL++;
k=0;


}
while (CL++<max)
cout<<"0 ";
cout<<endl;
}
return 0;
}
PS: 关于矩阵,我定义了宏M和N为其维度。到时候你只要修改输入的矩阵和M和N的值就可以了。
laosam280 当前离线   回复时引用此帖
旧 2009-03-27, 21:52   #4
laosam280
高级会员
 
注册日期: 2008-11-07
住址: 湖南长沙
帖子: 233
声望力: 21
laosam280 正向着好的方向发展
默认 回复: [求助]如何把一个包含0和1的矩阵中的相邻的1都加起来

说明:你把你的矩阵放在一个.txt文件中,保存在work文件夹下。这样比直接输入还要省事。

a=load('shuju.txt');
[index1 index2]=size(a);
% search the range of a
max=0;
for j=1:1:index1
count=0;
flag=1;
for i=1:1:index2

if (a(j,i)==1)&&(flag)
count=count+1;
flag=0;
end
if a(j,i)==0
flag=1;
end

end

if max<count
max=count;
end
end
% get the value of valuable max(length of matric c)
c=zeros(index1,max);
for i=1:1:index1
CL=1;
k=0;
for j=1:1:index2

if (a(i,j)==1)
k=k+1;
else
if k>0
c(i,CL)=k;

CL=CL+1;
k=0;
end
end
end
if k>0
c(i,CL)=k;
CL=CL+1;
k=0;
end
end
laosam280 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
simulink中的3/2坐标变换 hj03063313 MATLAB论坛 2 2012-04-09 12:35
[MATLAB基础] k-nearest neighbor Juicy MATLAB论坛 3 2009-04-25 02:02
[求助]批量删除矩阵元素 walterhj MATLAB论坛 2 2009-03-25 16:33
请教constr函数问题 nibabashiwo MATLAB论坛 0 2009-01-14 14:25
怎样用窗函数截断IIR滤波器脉冲响应 wangzhuzhen MATLAB论坛 0 2008-11-14 14:53


所有时间均为北京时间。现在的时间是 15:54


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.