matlab 循环读取矩阵中矩阵怎么在for循环中用

  最近一周,对MATLAB有进行了新一轮的学习,对其矩阵化编程的思维有了更深入的了解。确实精妙!
  将矩阵A= [1 2 3; 2 4 3; 3 4 5]中所有的数字3替换为33.
如果还停留在C语言的思维可能就是
&& for i=1:3
if A(i,j)==3
A(i,j) = 33;
  而MATLAB语言则有更灵活的语法,
&& A(A==3) = 33
  这句的意思就是讲matlab中等于3的数复制为33;
  当在MATLAB中输入A==3
  得到的是一个逻辑数组,接下来的复制操作只对逻辑为真的部分进行。显然后一种写法代码更加简洁。
将A= [1 2;2 3; 3 4; 4 5]每行视为坐标;将5阶零矩阵的这四个位置复制为1;
  继续常规思维,也是最正常的思维就是每个位置赋值:
&& A= [1 2;2 3; 3 4; 4 5];
B = zeros(5);
B(A(i,1),A(i,2)) = 1;
  这里可以使用sub2ind这个函数,从字面意思已经知道,是将下标转换为索引值,具体原理可以help sub2ind以及type sub2ind(查看源码)
所以可以直接写成
&& A= [1 2;2 3; 3 4; 4 5];
&& B = zeros(5);
&& B(sub2ind(size(B), A(:,1), A(:,2)))=1
  深刻体会到矩阵处理问题的简洁之美!
统计矩阵A = [1 3 4; 5 3 2; 4 2 1]中3的个数
如果还停在初学C语言的思维,恐怕又是靠for解决问题
&& A = [1 3 4; 5 3 2; 4 2 1];
&& for i=1:3
if A(i,j)==3
  这使如果知道find函数和length函数,就会轻松不少:
&& length(find(A==3))
 总结,通过以上三个例子,可以看到:
  1、学习一门新的东西,一定要把握其精髓,不要固定步自封(比如一味使用for循环)、生搬硬套;
  2、就我现在体会,学习matlab最重要的是学习它丰富的函数和灵活的语法,也就是说这门语言处理运算的思维。
  3、作为一个技术人员,一定要偷懒,抠门。什么是偷懒,相同的功能,能用一行代码解决绝不用两行,什么是抠门,用最简洁的思维,最快的时间、最小的内存。
  4、敢想敢做,敢想:为什么不能用一行代码解决;敢做,敢于通过学习实现自己的想法。
阅读(...) 评论()扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
matlab中用for循环生成的n个单个数据怎么放入一个矩阵里,我用一个for循环做了个条件,得出1或0的结果,想把他们放在一个矩阵里
扫二维码下载作业帮
1.75亿学生的选择
clcclearfor i=1:40
if mod(i,2)==0
endendY=reshape(y,4,10)
为您推荐:
其他类似问题
扫描下载二维码查看: 2754|回复: 9|关注: 0
for循环中给矩阵赋值
<h1 style="color:# 麦片财富积分
新手, 积分 9, 距离下一级还需 41 积分
定义了个 zhibiao=zeros(4,cell)矩阵;cell是控制的循环次数。每次循环中依次计算出四个值,将第一个值赋给矩阵第一行,第二个值赋给矩阵第二行,。。以此类推。
我是这样写的:zhibiao(1,cell)=VXB;zhibiao(2,cell)=VK;zhibiao(3,cell)=VT;zhibiao(4,cell)=PC。
VXB、VK、VT、PC在每次循环都可以计算出一个值。
设置cell=10得到
& && && & 0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& & 0.1178
& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& & 3.1097
& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& & 3.3594
& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& && && &0& & 0.2568,不是我想要的结果啊。。
哪里有问题呢
<h1 style="color:# 麦片财富积分
我把cell设置为3
& && &&&0& && && &0& & 0.4046
& && && &0& && && &0& & 8.4834
& && && &0& && && &0& & 7.4775
& && && &0& && && &0& & 0.5179;就是除了最后一次计算前面的都没赋值
论坛优秀回答者
关注者: 246
将值v赋给矩阵a的第1行是:
<h1 style="color:# 麦片财富积分
将值v赋给矩阵a的第1行是:
我不是按行赋值的。而是给矩阵中的每个元素一个一个的赋值
论坛优秀回答者
关注者: 246
我不是按行赋值的。而是给矩阵中的每个元素一个一个的赋值
你把cell固定为10
a(1,cell) = v
就是给1行10列赋值
a(2,cell) = v
就是给2行10列赋值
以此类推,你只给第十列赋值过
所以你的得到结果完全没有问题
<h1 style="color:# 麦片财富积分
你把cell固定为10
a(1,cell) = v
就是给1行10列赋值
我刚才也发现这个问题了。q=1:cell, zhibiao(1,q)=VXB;我改成这样子,出现了??? Subscript indices must either be real positive integers or logicals.
论坛优秀回答者
关注者: 246
本帖最后由 kaaaf123 于
16:52 编辑
我刚才也发现这个问题了。q=1:cell, zhibiao(1,q)=VXB;我改成这样子,出现了??? Subscript indices mus ...
你这里的提示是说索引类型不对
况且,如果你这里a是10列,那么a(1,1:cell)就和我最初说的a(1,:)是一样的
<h1 style="color:# 麦片财富积分
你这里的提示是说索引类型不对
况且,如果你这里a是10列,那么a(1,1:cell)就和我最初说的a(1,是一样的
那应该怎么编写。如果按照你最初说的那样,我设置cell=3,出来的结果是
& & 0.4046& & 0.4046& & 0.4046
& & 8.4834& & 8.4834& & 8.4834
& & 7.4775& & 7.4775& & 7.4775
& & 0.5179& & 0.5179& & 0.5179
论坛优秀回答者
关注者: 246
|此回复为最佳答案
那应该怎么编写。如果按照你最初说的那样,我设置cell=3,出来的结果是
你的cell应该是循环变量吧:
for cell = 1:10
a(1,cell) = ...
a(2,cell) = ...
另外建议你换个变量名,cell是matlab内置函数名
<h1 style="color:# 麦片财富积分
你的cell应该是循环变量吧:
for cell = 1:10
a(1,cell) = ...
问题解决了。最大的问题是我把要赋值的矩阵尽然编写在了循环内,所以出不来我想要的结果。谢谢你的指导。
站长推荐 /2
Powered by查看: 7224|回复: 10|关注: 0
Matlab中怎样将每一次的for循环结果分别存进序号为1到K的矩阵
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
三维矩阵Normal,我将他提取为Normalx=Normal(:,:,1);Normaly=Normal(:,:,2); 现在要弄k个只有两列的矩阵,第一列是Normalx里的数据,第二列是Normaly里的数据。我的思路是:分别提取Normalx、Normaly里的相同块,如15×15,变成只有一列的矩阵,然后将两个矩阵合为两列,问题是,输出的只是最后一次结果的矩阵,我想每次循环都输出一个矩阵,求帮忙解决……
MATLAB 图像处理与计算机视觉版块优秀回答者
<h1 style="color:#1 麦片财富积分
关注者: 80
本帖最后由 hcq@@ 于
11:50 编辑
现在要弄k个只有两列的矩阵???,第一列是Normalx里的数据,第二列是Normaly里的数据。
我这边处理的是把第一列是Normalx里的数据,第二列是Normaly里的数据放入一个2列的矩阵A,不知你的说的k个2列矩阵是什么意思clear all
close all
Normal=imread('1.jpg');
Normalx=Normal(:,:,1);%%r、g分量的列分别转置一下放入新的矩阵即可
Normaly=Normal(:,:,2);
[m,n]=size(Normalx);
A=zeros(m*n,2);
for i=1:m
for j=1:n
A((i-1)*n+j,1)=Normalx(i,j);
A((i-1)*n+j,2)=Normaly(i,j);
end
end
复制代码
<h1 style="color:# 麦片财富积分
hcq@@ 发表于
现在要弄k个只有两列的矩阵???,第一列是Normalx里的数据,第二列是Normaly里的数据。
我这边处理的是把 ...
抱歉没说清楚!因为之前还不知道分多少块,所以我就用K来表示,假设Normalx可以分20块,那就是用20个矩阵存。你那个代码A((i-1)*n+j,1)=Normalx(i,j);这行没看明白:)
MATLAB 图像处理与计算机视觉版块优秀回答者
<h1 style="color:#1 麦片财富积分
关注者: 80
本帖最后由 hcq@@ 于
12:35 编辑
咿呀儿 发表于
抱歉没说清楚!因为之前还不知道分多少块,所以我就用K来表示,假设Normalx可以分20块,那就是用20个矩阵 ...
你那个代码A((i-1)*n+j,1)=Normalx(i,j);这行没看明白:)???
比如Normalx(i,j)这个矩阵有5行5列,那么第一行的5列元素放入A(??,1)中,
第二行是不是6-10
第三行是不是11-15
应该离你的需求不远的感觉
<h1 style="color:# 麦片财富积分
hcq@@ 发表于
你那个代码A((i-1)*n+j,1)=Normalx(i,j);这行没看明白???
比如Normalx(i,j)这个矩阵有5行5列,那么第一 ...
你这个诗存进一个矩阵A中,那可以再将A分割成几个小矩阵吗?
MATLAB 图像处理与计算机视觉版块优秀回答者
<h1 style="color:#1 麦片财富积分
关注者: 80
咿呀儿 发表于
你这个诗存进一个矩阵A中,那可以再将A分割成几个小矩阵吗?
可以啊 矩阵A已经知道了 想怎么分割就怎么分割 涉及到的知识点就是纯矩阵操作了& &
<h1 style="color:# 麦片财富积分
咿呀儿 发表于
你这个诗存进一个矩阵A中,那可以再将A分割成几个小矩阵吗?Normalx=zeros(690,465);
Normaly=ones(690,465);
for ii=1:15:690
& & for jj=1:15:465
& && &&&NormalX=Normalx(ii:ii+14,jj:jj+14); %每个小平面含有15×15个像素
& && &&&NxX=NormalX(:);& & %将NormalX变成列向量,逐列变换
& && &&&
& && &&&NormalyY=Normaly(ii:ii+14,jj:jj+14);
& && &&&NyY=NormalyY(:);& & %将NormalY变成列向量,逐列变换
& && &&&
& && &Mn=[NxX,NyY];& &%合并变成两列,第一列为x,第二列为y,
& && && && && && &&&%即每一行为一个像素的法向量
& &
& & end
end复制代码
<h1 style="color:# 麦片财富积分
怎样做可以将每个for循环的结果存进M1,M2……Mk,我是新手,真的这个问题难倒我了:Q
<h1 style="color:# 麦片财富积分
我也有同样的需求!:L
<h1 style="color:# 麦片财富积分
关注者: 1
我也是同样的问题,很苦恼。每次for循环后总是放在一个矩阵中,很难知道第n次循环的值在矩阵的什么地方,哪个高手来搞定,我给他买麦片。要求循环后分别产生一系列矩阵M1、M2、M3...Mk分别放置1:k循环的结果。例如第一次循环放在K1中,第二次循环放在K2中,以此类推。
站长推荐 /2
Powered bywhile循环重复执行语句,当条件为 true。
在MATLAB 中 while循环的语法是:
while &expression&
&statements&
while 循环反复执行程序语句只要表达式为 true。
表达式是 true,当结果不为空,并包含所有非零元素(逻辑或实际数字)。否则,表达式为 false。
创建一个脚本文件,并键入下面的代码:
% while loop execution
while( a & 20 )
fprintf(&#39;value of a: %d
&#39;, a);
a = a + 1;
当您运行该文件,它会显示以下结果:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
本站代码下载:

我要回帖

更多关于 matlab 循环输出矩阵 的文章

 

随机推荐