matlab 循环读取矩阵改为矩阵的问题,该怎么解决?

在matlab中运用while循环输出矩阵,可是矩阵都直接输出所有数据,怎样将矩阵一个一个输出呢?
m=0;while m&19
t=num2str(m,'%03d');
filename=strcat('D:\UserData\Administrator\桌面\建模\碎纸片拼接\附件1\',t,'.bmp');
im=imread(filename);
m=m+1;endim
13年国赛题?什么叫矩阵一个一个输出?
你的意思是将矩阵中的元素一个一个的输出出来吗?
已有帐号?
无法登录?
社交帐号登录matlab如何不使用循环取出矩阵列元素相等的行 - 饮水思源
饮水思源 - 主题文章阅读  [讨论区: MathTools]本主题共有 10 篇文章,分 1 页, 当前显示第 1 页 []
[][] 发信人: (小鳄鱼), 信区: MathTools
题: matlab如何不使用循环取出矩阵列元素相等的行
发信站: 饮水思源 (日18:23:16 星期三)
N行4列的矩阵,想取出其中列元素相等的行,不想使用循环(拖慢计算速度,外环已经有
几层循环),如何做到?
※ 来源:?饮水思源 bbs.?[FROM: 219.228.127.245]
[][] 发信人: (maddog), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日19:45:40 星期三)
完全不用循环好像不太可能。下面的方法应该可以减少些计算量
设M为你的Nx4的矩阵。
1. 计算矩阵的行范数(1,2范数都行),输出Nx1的列向量A,相等的行范数相等;
2. 对A进行排序,[B, C] = sort(A),其中C是B中每个元素在A中的位置;
3. B = [B;B(end)]; D = diff(B); 这个时候D中会有连续0的片段;
4. 找出这些片段,然后从C中找出对应的行数,返回M对这些行数进行比较;
5. 输出结果。
【 在 leejialun 的大作中提到: 】
: N行4列的矩阵,想取出其中列元素相等的行,不想使用循环(拖慢计算速度,外环已..
: 几层循环),如何做到?
※ 来源:?饮水思源 bbs.?[FROM: 192.93.101.170]
[][] 发信人: (骆驼祥子), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日21:38:32 星期三)
不知道是不是你表达的意思,例:
&& A = [1 2 3 4; 1 1 1 1; 1 3 2 4; 0 0 0 0; 2 2 2 2; 1 2 4 3;]
&& find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
是没用到循环,但是matlab在执行:的时候其实也是用了循环吧,不知道是否真的能优化
【 在 leejialun 的大作中提到: 】
: N行4列的矩阵,想取出其中列元素相等的行,不想使用循环(拖慢计算速度,外环已..
: 几层循环),如何做到?
※ 来源:?饮水思源 bbs.?[FROM: 130.233.164.15]
[][] 发信人: (maddog), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日22:27:33 星期三)
澹颐菜粕蟠硪猓斫獬砂严嗟鹊男懈页隼戳恕
你的这个貌似可以优化下,给A添加第5列,从1到N位每行的行号
idx = find(A(:,1)-A(:,2)==0);
A = A(idx,2:end);
最后A即为行数…
【 在 uiui 的大作中提到: 】
: 不知道是不是你表达的意思,例:
: && A = [1 2 3 4; 1 1 1 1; 1 3 2 4; 0 0 0 0; 2 2 2 2; 1 2 4 3;]
: && find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
: 是没用到循环,但是matlab在执行:的时候其实也是用了循环吧,不知道是否真的能..
: 计算速度
: 【 在 leejialun 的大作中提到: 】
: : N行4列的矩阵,想取出其中列元素相等的行,不想使用循环(拖慢计算速度,外环..
: : 几层循环),如何做到?
※ 来源:?饮水思源 bbs.?[FROM: 192.93.101.170]
[][] 发信人: (小鳄鱼), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日09:51:42 星期四)
谢楼上。再问下下一步,要取出连续三个0的行
[0 2 3 4 0 0 7 8 0
1 2 3 4 5 6 7 8 9 10 11
]如何定位出
【 在 herebegins 的大作中提到: 】
: 澹颐菜粕蟠硪猓斫獬砂严嗟鹊男懈页隼戳恕
: 你的这个貌似可以优化下,给A添加第5列,从1到N位每行的行号
: for i=1:3
: idx = find(A(:,1)-A(:,2)==0);
: A = A(idx,2:end);
: 最后A即为行数…
: 【 在 uiui 的大作中提到: 】
: : 不知道是不是你表达的意思,例:
: : && A = [1 2 3 4; 1 1 1 1; 1 3 2 4; 0 0 0 0; 2 2 2 2; 1 2 4 3;]
: : && find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
: : 是没用到循环,但是matlab在执行:的时候其实也是用了循环吧,不知道是否真的..
: : 计算速度
※ 来源:?饮水思源 bbs.?[FROM: 219.228.127.245]
[][] 发信人: (maddog), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日06:08:22 星期五)
最先想到的是特征提取,
可以用卷积或者cross correlation来做
【 在 leejialun 的大作中提到: 】
: 谢楼上。再问下下一步,要取出连续三个0的行
: 例如矩阵
: [0 2 3 4 0 0 7 8 0
1 2 3 4 5 6 7 8 9 10 11
: ]如何定位出
: 【 在 herebegins 的大作中提到: 】
: : 澹颐菜粕蟠硪猓斫獬砂严嗟鹊男懈页隼戳恕
: : 你的这个貌似可以优化下,给A添加第5列,从1到N位每行的行号
: : for i=1:3
: : idx = find(A(:,1)-A(:,2)==0);
: : A = A(idx,2:end);
: : 最后A即为行数…
※ 来源:?饮水思源 bbs.?[FROM: 78.240.198.180]
[][] 发信人: (骆驼祥子), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日20:10:09 星期五)
这些本来就是非常简单的矩阵行和数的处理,稍微想想就写出来了,真不用那么复杂,除
非是搞理论数学的人。。
find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
就是找出所有行里第1个数字等于第2个数字等于第3个数字等于第四个数字的列号,直接了
当,你那样反复把矩阵A重写没有意义啊,而且你这样子人家原来的数据A都被你覆盖了,
要是是很重要的数据岂不是要丢掉了。。。
楼主下一个问题,还是题意写的不清楚,是找出一行中有连续三个0的所有列吧,不知道是
不是这样的意思:
A=[0 2 3 4 0 0 7 8 0
0; 1 2 3 4 5 6 7 8 9 10 11]
[I J]=size(A);
for i = 1:I
for j = 1:(J-2)
if A(i,j)==0&A(i,j+1)==0&A(i,j+2)==0
B = A(:,j:j+2)
什么卷积,互相关。。。太理论了
【 在 herebegins 的大作中提到: 】
: 澹颐菜粕蟠硪猓斫獬砂严嗟鹊男懈页隼戳恕
: 你的这个貌似可以优化下,给A添加第5列,从1到N位每行的行号
: for i=1:3
: idx = find(A(:,1)-A(:,2)==0);
: A = A(idx,2:end);
: 最后A即为行数…
: 【 在 uiui 的大作中提到: 】
: : 不知道是不是你表达的意思,例:
: : && A = [1 2 3 4; 1 1 1 1; 1 3 2 4; 0 0 0 0; 2 2 2 2; 1 2 4 3;]
: : && find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
: : 是没用到循环,但是matlab在执行:的时候其实也是用了循环吧,不知道是否真的..
: : 计算速度
※ 来源:?饮水思源 bbs.?[FROM: 130.233.164.15]
[][] 发信人: (maddog), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日22:22:41 星期五)
【 在 uiui 的大作中提到: 】
: 这些本来就是非常简单的矩阵行和数的处理,稍微想想就写出来了,真不用那么复杂..
: 非是搞理论数学的人。。
: find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
: 就是找出所有行里第1个数字等于第2个数字等于第3个数字等于第四个数字的列号,..
: 当,你那样反复把矩阵A重写没有意义啊,而且你这样子人家原来的数据A都被你覆盖..
: 要是是很重要的数据岂不是要丢掉了。。。
明白你的意思,所以说如果想较少计算量的话可以那么改。至于数据丢失问题,A0 = A;
拷贝下就是了……
: 楼主下一个问题,还是题意写的不清楚,是找出一行中有连续三个0的所有列吧,不..
: 不是这样的意思:
: A=[0 2 3 4 0 0 7 8 0
0; 1 2 3 4 5 6 7 8 9 10 11]
: [I J]=size(A);
: for i = 1:I
for j = 1:(J-2)
if A(i,j)==0&A(i,j+1)==0&A(i,j+2)==0
B = A(:,j:j+2)
是要定位出[0 0 0; 9 10 11]这个pattern,所以说第一反应可用那些方式。把你的改动下
A = [...];
P = [0 0 0; 9 10 11];
[m,n] = size(A);
for i=1:m-1
for j=1:n-1
a = A(i:i+1,j:j+2);
diff = sum(abs(P(:)-a(:)));
if diff==0
output i,j;
返回左上角的坐标
※ 来源:?饮水思源 bbs.?[FROM: 192.93.101.170]
[][] 发信人: (不会数数的人), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日21:06:23 星期六)
凑个热闹..
前一个问题
b = [0 1 2 3;
find(var(b)==0)
find(~all(diff(b), 1))
后一个问题
[0 2 3 4 0 0 7 8 0
1 2 3 4 5 6 7 8 9 10 11
id = find(all( toeplitz([a(1,1), ones(1,2)], a(1,:))==0 ,1))
a(:, id-2:id)
可以推广到 n 个连续的零
【 在 herebegins 的大作中提到: 】
: 【 在 uiui 的大作中提到: 】
: : 这些本来就是非常简单的矩阵行和数的处理,稍微想想就写出来了,真不用那么复..
: : 非是搞理论数学的人。。
: : find(A(:,1)-A(:,2)==0&A(:,2)-A(:,3)==0&A(:,3)-A(:,4)==0)
: : 就是找出所有行里第1个数字等于第2个数字等于第3个数字等于第四个数字的列号..
: (以下引言省略...)
※ 来源:?饮水思源 bbs.?[FROM: 180.169.77.50]
※ 修改:?count 于 日21:14:31 修改本文?[FROM: 180.169.77.50]
※ 修改:?count 于 日21:46:49 修改本文?[FROM: 180.169.77.50]
※ 修改:?count 于 日21:48:02 修改本文?[FROM: 180.169.77.50]
[][] 发信人: (小鳄鱼), 信区: MathTools
题: Re: matlab如何不使用循环取出矩阵列元素相等的
发信站: 饮水思源 (日18:46:13 星期天)
很简洁,大赞,待我去试试
【 在 count 的大作中提到: 】
: 凑个热闹..
: 前一个问题
: b = [0 1 2 3;
: find(var(b)==0)
: find(~all(diff(b), 1))
: 后一个问题
: [0 2 3 4 0 0 7 8 0
1 2 3 4 5 6 7 8 9 10 11
: id = find(all( toeplitz([a(1,1), ones(1,2)], a(1,:))==0 ,1))
: a(:, id-2:id)
: 可以推广到 n 个连续的零
: 【 在 herebegins 的大作中提到: 】
: : (以下引言省略...)
※ 来源:?饮水思源 bbs.?[FROM: 219.228.127.245]
本主题共有 10 篇文章,分 1 页, 当前显示第 1 页 [][][]matlab循环如何对上一个循环的运算结果运算,结果是矩阵要使这两个矩阵的差的矩阵的最大值不超过一个值,停止循环也就是新出来的矩阵与上一个运行处的结果差矩阵中最大的元素小于一个值,也就是精度
黎约绛血Pl
delta = 10;while delta > 给定值
循环1:算差矩阵A
delta=max(max(A));end
为您推荐:
其他类似问题
扫描下载二维码小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
matlab循环计算转为矩阵 30金币求助
程序是用来做菲涅尔积分的,由于程序运算时间太长,因此想把最耗时的两重for循环运算部分改为矩阵运算形式,但没找到合适的方法,循环中运行的语句本身就是一个矩阵运算,想请教各位怎么改成完全矩阵运算的程序。
X1=-22e-3;
Y1=-22e-3;
=meshgrid(X1:(X2-X1)/(Num0-1):X2,Y1:(Y2-Y1)/(Num0-1):Y2);
for i=1:Num0
& & x1=x(1,i);
& & for j=1:Num0
& && &&&y1=y(j,1);
& && &&&Fij=Fun2.*exp(sqrt((x1-x).^2+(y1-y).^2)); %Fun2是一个矩阵函数
& && &&&Fun3(i,j)=sum(sum(Fij));
非常感谢meatball,这样的处理确实能提高运行效率。不过对于我要做的程序还是不够,一个原因是里面用的积分最多的有二十多个,二是Num0的取值要到8000或者16000才能得到稳定解,这时候运行非常的慢,几倍的提高还是没办法解决问题。另外有个问题就是Fun2矩阵有时候不是对称的,因此得到的Fun3也不是对称的,不能用这个方法来算。不过还是很感谢你。要是后面没人能解决的话,这金币就给你了。
我再想想有没有办法,如果没能解决,金币还是算了吧。:work:
谢谢himyou。第一次见到这个并行处理,学习了。我把程序用parfor改进了一下,虽然不能最终解决问题,但相比还是要好一些。
谢谢csgt0.我仔细看了这个算法。但感觉其中的推导有些问题。第七式到第八式的推算部分直接把E0跟其它部分分别进行积分,即使不经过衍射孔这样积分也是不对的。
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研}

我要回帖

更多关于 matlab矩阵循环移位 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信