Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2009-02-05
年龄: 45
帖子: 1
声望力: 0 ![]() |
![]()
大家好,我有一个只包含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]. 请问应如何做。谢谢了。
|
![]() |
![]() |
![]() |
#2 |
高级会员
注册日期: 2008-11-01
年龄: 39
帖子: 406
声望力: 26 ![]() |
![]()
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”,再次登陆时亦便于查看回答是否真的帮到你了 |
![]() |
![]() |
![]() |
#3 |
高级会员
注册日期: 2008-11-07
住址: 湖南长沙
帖子: 233
声望力: 21 ![]() |
![]()
你的这个问题实在不难,但是还是忙活了我一下午。我用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的值就可以了。 |
![]() |
![]() |
![]() |
#4 |
高级会员
注册日期: 2008-11-07
住址: 湖南长沙
帖子: 233
声望力: 21 ![]() |
![]()
说明:你把你的矩阵放在一个.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 |
![]() |
![]() |
![]() |
主题工具 | |
显示模式 | |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
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 |