-4

重複の可能性:
Excel の sumif のように、別の列に特定の条件を持つ 1 つの列を追加する

ここで、2 番目の列の数を数えたいと思います。列 1 と同じ条件で、ここで再び指示します。

A=[1 2;2 3;3 4;3 2;4 3;5 4;5 2;6 3;7 2;8 3]

今、列2の2、3、4を数えたいと思います。条件は、列1の範囲が0から3、3から6、6から9、9から12の場合です。

答えはそのとおりです

範囲 no2、no3、no4

0 ~ 3 -- 2-----1 -------1

3~6 ---1------2-------1

6 ~ 9 -- --1-----1------0

助けてください、、、、あなたの返事を待っています..

4

2 に答える 2

0

MATLAB では、論理インデックスを使用できます。つまり、任意の数の条件で変数をフィルター処理できます。たとえば、vecが任意のベクトルで、vec負の要素がいくつあるかを知りたい場合は、次のように実行できます。

% save the elements of vec which are negative
ind = vec < 0
% vec is a logical variable. Each element of vec lower that 0 is store as 1.
% to know how many elements of vec are smaller than 0
sum(ind)
% will tell you how many ones are there in ind, meaning the number of elements in vec which
% are smaller than 0

% Of course you can do the same all at once,
sum(vec < 0)
% and you can directly access the elements in the same way
vec(vec < 0)

問題に戻ると、次のようなものを使用できます。

for i = 1:3:length(A)
    %print how many 2s,3s and 4s
    fprintf('%d to %d: %d, %d, %d\n',i,i+2,sum(A(i:i+2,2)==2),sum(A(i:i+2,2)==3),sum(A(i:i+2,2)==4))
end
于 2012-07-09T14:11:45.730 に答える
0

次のようなことができる可能性があります。

for(n=1:size(A,1))
    if(A(n,1) >= 0 && A(n,1) < 3)
        % Do something
    elseif( ) % next test condition
        % Do something there.
    end 
end

もう 1 つのオプションは、for ループを使用して最初の列を通過し、switch ステートメントを使用してその入力に基づいて適切なアクションを引き出すことです。

以下の更新:

for(n = 1:size(A,1))
    switch(mod(A(n,1),3))
        case 0 % this will be 0, 1, 2 in your column
            % code
        case 1
            etc...
    end
end

matlab のモジュラスに関する情報

matlab のスイッチに関する情報

于 2012-07-09T13:30:28.157 に答える