作者banco (Acoustic)
看板MATLAB
标题Re: [讨论] 想请教如何有效率地找出特定元素位置
时间Tue Oct 8 20:26:26 2013
※ 引述《smarter1004 (请拒绝看各新闻台)》之铭言:
: 各位高手大家好
: 假设 size(a) = [1 5]
: 那如果我要找出a中等於0的元素位置我只要输入
: a == 0
: 那麽如果 size(a) = [10 5]
: 我要找出a中等於[1 2 3 4 5]的row似乎只能用for回圈解决
: 但它实在有够慢
: 有没有类似第一个有效率方法的写法呢?
: 谢谢各位
把它视为矩阵运算会比较快
我乱造一个 pp x 5 的矩阵M
每个row的数值为介於0~10的整数
从里面找有哪些row的内容为 [1 2 3 4 5]
基本想法是先来个矩阵减法
再来找哪些row的平方和为0
pp=1000000;
a = [1 2 3 4 5];
M = floor(rand(pp,5)*10);
tic;
tmp=(M-ones(pp,1)*a)';
find(sum( tmp.^2 )==0)
toc
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.92.125
1F:→ jatj:用ismember跟find不是两行就搞定了吗 10/08 20:30
2F:→ banco:速度问题,ismember比较慢 10/08 20:50
3F:推 sunev:那如果是这样呢? 10/09 00:26
4F:→ sunev:M(:,1)==1&M(:,2)==2&M(:,3)==3&M(:,4)==4&M(:,5)==5 10/09 00:26
5F:→ banco:楼上的方式最快~ 10/09 08:05
6F:推 sunev:从命中first column里的再找剩下的理论上会更快,不过我懒了 10/09 10:07
7F:推 smarter1004:如果有一海票column的话 sun大的方法要怎麽写啊? 10/09 10:39
8F:推 sunev:生出指令字串再用eval做, 10/09 15:04
9F:推 kurt28:推s大的方法 不过也可以参考dsearchn这个指令 10/09 15:34
10F:→ kurt28:但是有一定的风险就是了XD 10/09 15:35
11F:推 smarter1004:感谢大家的帮忙 目前正使用banco大的方法 10/09 16:53
12F:→ smarter1004:sun大的方法不知道为啥我测起来比较慢耶 10/09 16:53
13F:推 sunev:你有几个row? 10/09 18:14
14F:推 smarter1004:75万左右 10/10 03:05