作者fxxkjoe1231 (鲁到入味)
看板MATLAB
标题[运算] 阵列中取多个特定值不用回圈
时间Wed Jun 26 15:23:38 2019
大家好,小弟目前有两个阵列a与b如下:
A=[1 1 2 3 4 5 6 7 7 9];
B=[2 5 7];
我想找出A中,与B中个别数字相同之元素,并输出一逻辑阵列如下
[0 0 1 0 0 1 0 1 1 0]
该如何不使用for回圈进行计算?
因为在实务上,A为一张最大可能达8kx8k的标签(labeled)影像,而B为欲留下区域的标签编号,可能也有数千个,目前卡在运送效率这里。
谢谢大家
-----
Sent from JPTT on my Sony G8441.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.11.34.91 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1561533820.A.BC8.html
1F:推 sin55688: sum(A==B'); 不确定有没有其他内建指令可以用 06/26 15:34
2F:→ fxxkjoe1231: 感谢楼上大大! 06/26 15:39
3F:推 sunev: 应该是any 06/26 19:25
4F:推 sppmg: ismember() 06/27 00:28
5F:推 sppmg: ismember 可能比较好,或许会做 unique 以及最佳化搜寻。用 06/27 00:33
6F:→ sppmg: gpuarray 不知是否能加速,你试试。 06/27 00:33
7F:推 sunev: ismember的确快得多 06/27 13:13
8F:→ sunev: 一开始的labeled image是从bwlabel来的吗? 06/27 13:14
9F:→ sunev: 改用bwconncomp,其结果会比较方便处理 06/27 13:15
对的,我的二值影像是用bwlabel上标签,现阶段应该不会更动这段。
原先使用sin的方法,然後使用unique剔除重复值,
但是因为实际处理A与B累加过程的阵列过大,所以还是加了一个回圈,
而运算速度从1.4ksec降到不到4sec,然後使用sppmg建议,仅需不到1.5sec,
速度提升三个数量级,原先整个程序最耗时的反而变得最不耗时。
谢谢大家
※ 编辑: fxxkjoe1231 (1.169.143.221 台湾), 06/27/2019 21:43:29