如何用matlab筛选一个数组中大于某值的数

例如a=【12,4,25,36,5,18,9】求大于10的数

数组很大,运算速度很慢,可以提出所有大于0的值一起运算,得到的值再放回原位么?
对于这一问,可以采用逻辑下标,对大的数组可以有效地提高处理速度。
比如数组(或矩阵)为A,10行20列,其中有3个元素大于0,具体位置未知. index_positive = A>0;这样得到的index_positive 是这些元素的逻辑下标,index_positive是一个与A相同大小的10行20列的0,1值数组,只有那三个元素的位置上,值是1.
然后 B=A(index_positive)就得到了这三个元素的值。然后对B里的元素进行需要的运算。最好是相同的或有规律的,比如所有元素乘以2,那么就是C=2×B;或者第1个元素×1, 第2个元素×2等,这时可以D=1:3; C=B .* D; 。 如果每一个要进行不同的运算,那这里只有对B进行循环。
最后要把C放回原位,用A(index_positive)=C;就可以了。
对于一个1000×1000的数组(矩阵),这个方法的速度提高是很可观的。原因在于它使用C语言实现了循环,而for循环是用matlab语言实现的,判断循环条件的时候大大消耗了时间。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-31
find函数即可搞定 具体find(a>10)