2个回答
展开全部
数组很大,运算速度很慢,可以提出所有大于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语言实现的,判断循环条件的时候大大消耗了时间。
对于这一问,可以采用逻辑下标,对大的数组可以有效地提高处理速度。
比如数组(或矩阵)为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语言实现的,判断循环条件的时候大大消耗了时间。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询