-1

重複の可能性:
指定された範囲内のマトリックス内の値の数をカウントする

次のマトリックスがあります

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

範囲内の値を持つ最初の行にいくつの要素があるかを調べる方法は>2 & <6?

4

2 に答える 2

0

ベクトル化された計算を使用して、行列の観点から考える必要があります。(行に対して独立して動作するようにベクトル化されていないため、ここで find を使用することは良い解決策ではありません。)

まず、MATLAB で A > 2 の検定を試すとどうなるでしょうか。それを試してみてください!

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

>> A > 2
ans =
     0     0     1     1     1     1     1
     1     1     1     1     1     1     0
     1     1     0     1     1     1     1

A の要素が 2 より大きい場合、MATLAB は論理配列 true を生成します。同様に、A < 6 と入力すると、別の論理配列が得られます。

>> A < 6
ans =
     1     1     1     1     1     0     0
     1     1     1     0     0     0     1
     1     1     1     1     0     0     0

2 つの演算を 1 つの式に結合するとどうなるでしょうか。

>> (A > 2) & (A < 6)
ans =
     0     0     1     1     1     0     0
     1     1     1     0     0     0     0
     1     1     0     1     0     0     0

わかりました。この配列は、両方の部分式が true であった場所を示しています。合計およびその他の算術演算を使用して論理配列を操作できることに注意してください。

>> sum((A > 2) & (A < 6),2)
ans =
     3
     3
     3

したがって、上記の式は、各行の目標を満たす要素の数をカウントします。これは非常に高速です。MATLAB を使用する必要があるため、MATLAB の使用方法を学びます。あなたのコードはより良くなります。

于 2012-08-19T12:53:24.117 に答える
0

accountの意味をよく理解していればfind、基準を満たす要素が必要な場合:

B = A(1,:)
find(B > 2 & B < 6)

または1行で:

find(A(1,:) > 2 & A(1,:) < 6)

また、指定された論理式を満たす配列の実際の要素ではなく、インデックスfindが得られることも知っておく必要があります。

于 2012-08-19T03:45:45.783 に答える