作者profyang (prof)
看板MATLAB
标题Re: For 双重回圈,显示问题
时间Sat Jul 25 19:03:20 2015
※ 引述《celestialgod (攸蓝)》之铭言:
: 标题: Re: For 双重回圈,显示问题
: 时间: Sat Jul 25 17:09:34 2015
:
: ※ 引述《ccchain (阳光沙滩脚踏车~)》之铭言:
: : ※ 引述《celestialgod (攸蓝)》之铭言:
: : : 你要的应该是这样?
: : : for i = 1:6
: : : for j = (i+1):6
: : : eval(['compare', num2str(i), num2str(j), '= dist(A(', ...
: : : num2str(i), '), B(', num2str(j), ');']);
: : : end
: : : end
: : 请问 只能用eval存有变数跟文字混在一起? 还是有其它方法可以答到同样效果?
: : For i=1:3
: : For j=1:3
: : Compare (I,j)=i*j ;
: : End
: : End
: : 因为若是用eval, 我不知道该怎麽取
: : eval(['compare', num2str(I),num2str(j)...])
: : 是直接拿compare (I)(j)?
: : 谢谢。刚练习matlab不久,问题太浅,请各位大大耐心指导,感恩。
:
: 你可以考虑其他的资料格式: cell
:
: out = cell(3, 3);
: for i = 1:3
: for j = 1:3
: out{i, j} = i*j;
: end
: end
:
: 每一个cell可以存struct (field), ND array, ...各种类型的变数
:
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.205.27.107
: ※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1437815377.A.52C.html
: 推 profyang: 痾...只是存个i*j为啥要用到cell...直接out=zeros(3,3) 07/25 17:14
: → profyang: 然後out(i,j)=i*j; 这样不好? 07/25 17:14
: → profyang: 何况只是相乘的话 我会先用meshgrid展开他再直接.*就不 07/25 17:15
: → profyang: 用for回圈了 07/25 17:15
: 他应该只是要一个简单的例子,去避免使用eval而已
:
: 他後面可能要接一个function带入i, j
:
: 在我不知道output的情况下,我建议他用cell处理
:
: 如果i*j,最快的方法应该是bsxfun(@times, 1:3, [1:3]')
: ※ 编辑: celestialgod (123.205.27.107), 07/25/2015 17:45:30
: 推 profyang: 真的是bsxfun比较快 看来是meshgrid展开花到额外资源了 07/25 18:48
刚好测试了一下
分享给大家
这个简单的相乘就我现在知道有三种方法(包括c大讲的bsxfun)
底下是我测试的code:
a=1:1000; b=1:1000;
tic;
c1=bsxfun(@times, a, b.'); %c大提供的方法
toc;
tic;
[A,B]=ndgrid(a,b); %我最直觉的做法 先用ndgrid或meshgrid展开
c2=A.*B; %然後使用.*直接让他每个元素去乘
toc;
tic;
c3=(a.')*b; %这等於让一个N*1的矩阵乘上1:N的矩阵 出来会是N*N的矩阵也是我们要的
toc;
出来时间:
第一次:
Elapsed time is 0.006436 seconds.
Elapsed time is 0.014653 seconds.
Elapsed time is 0.004486 seconds.
第二次:
Elapsed time is 0.004184 seconds.
Elapsed time is 0.011513 seconds.
Elapsed time is 0.006018 seconds.
可以看出方法一(bsxfun)和分法三N*1和1*N矩阵相乘差不多快
但是方法二因为多使用了个ndgrid所以比较慢 单单测A.*B的时间的话:
第一次:
Elapsed time is 0.005263 seconds.
Elapsed time is 0.004248 seconds.
Elapsed time is 0.004387 seconds.
第二次:
Elapsed time is 0.009343 seconds.
Elapsed time is 0.005209 seconds.
Elapsed time is 0.003835 seconds.
时间也是差不多的
所以看来我以後要谨慎使用ndgrid这种函数了( ′-`)y-~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.222.1
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1437822206.A.742.html
1F:→ celestialgod: ndgrid有很多其他用途拉...只是这里不够好用(摊手 07/25 19:11
2F:→ celestialgod: 如果都是n x 1的向量 就复制了 2n次 07/25 19:11
3F:→ profyang: 我知道很多地方用起来很方便阿XD 所以我才说谨慎使用 07/25 19:26
4F:→ celestialgod: 这种情况不多就是(摊手 07/25 19:27