0

私はこのコードを書きました:

AnXm行列です

[nA, mA] = size(A);

currentVector(nA,mA) = 0;
for i = 1: nA
    for j = 1 : mA
        if A (i,j) ~= 0
            currentVector(i,j) = ceil(log10( abs(A(i,j)) ));
        else
            currentVector(i,j) = 0;
        end
    end
end

上記のコードをより「matlab」の方法で書くにはどうすればよいですか?

if/else および for ループのショートカットはありますか? たとえばC

int a = 0;
int b = 10;
a = b > 100 ? b : a;

これらの条件は、私にとif/elseを思い出させ続けます。CJava

ありがとう

4

2 に答える 2

5
%# initialize a matrix of zeros of same size as A
currentVector = zeros(size(A));

%# find linear-indices of elements where A is non-zero
idx = (A ~= 0);

%# fill output matrix at those locations with the corresponding elements from A
%# (we apply a formula "ceil(log10(abs(.)))" to those elements then store them)
currentVector(idx) = ceil(log10( abs(A(idx)) ));
于 2012-06-02T05:24:17.573 に答える
1
currentVector =  ceil(log10(abs(A)));
currentVector(A == 0) = 0;

注: Matlab では、log on zeros を適用することは完全に合法です。結果は -inf です。

于 2012-06-03T15:26:59.497 に答える