MATLAB如何取数组中非零的最小值,数组里面都是正数。

例如一个数组:F=[0 0 0 7 10 20 50 88],要输出数组F中的最小非零值,即7,如何做到?

代码如下:

a=magic(6);

disp(a)

for i=1:1:6  

    B=a(i,:);

    disp(B)

    [b,ind]=min(B(find(B~=0)));

        disp(b)

        disp(ind)

   for j=1:1:6

        c=100;

        disp(c)

   end

end

扩展资料

Matlab中数组元素引用有三种方法:

1、下标法(subscripts)

2、索引法(index)

3、布尔法(Boolean)

注意:在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样)。

Matlab的存储顺序就是说先行后列,对于3维数组,就是先行后列再页。

下标法引用:

A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end”

这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如

A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素;

A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列;

A(1,end-1)表示引用第1行倒数第2个元素;

A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-26
数组很大,运算速度很慢,可以提出所有大于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语言实现的,判断循环条件的时候大大消耗了时间。
第2个回答  2010-09-19
F=[0 0 0 7 10 20 50 88];
min(F(find(F~=0)))本回答被提问者采纳
相似回答