logo

Pythonのnumpy.where()

NumPy モジュールは、条件に基づいて要素を選択するための関数 numpy.where() を提供します。条件に応じて a または b から選択された要素を返します。

たとえば、すべての引数 -> 条件、a と b が numpy.where() に渡された場合、条件によって生成されたブール配列の値に応じて、a と b から選択された要素が返されます。

条件のみが指定されている場合、この関数は関数 np.asarray (condition).nonzero() の短縮形です。ゼロ以外はサブクラスに対して正しく動作するため、直接的には優先されるべきです。

構文:

 numpy.where(condition[, x, y]) 

パラメーター:

これらは、numpy.where() 関数の次のパラメータです。

条件: array_like、bool

このパラメータが True に設定されている場合は x が生成され、それ以外の場合は y が生成されます。

x、y: 配列のような:

このパラメータは、選択する値を定義します。 x、y、および条件は、何らかの形状にブロードキャスト可能である必要があります。

戻り値:

この関数は、条件が True の場合は x の要素を含む配列を返し、それ以外の場合は y の要素を含む配列を返します。

例 1: np.where()

 import numpy as np a=np.arange(12) b=np.where(a<6,a,5*a) b < pre> <p> <strong>In the above code</strong> </p> <ul> <li>We have imported numpy with alias name np.</li> <li>We have created an array &apos;a&apos; using np.arange() function.</li> <li>We have declared the variable &apos;b&apos; and assigned the returned value of np.where() function.</li> <li>We have passed the array &apos;a&apos; in the function.</li> <li>Lastly, we tried to print the value of b.</li> </ul> <p>In the output, the values ranging from 0 to 5 remain the same as per the condition, and the other values have been multiplied with 5.</p> <p> <strong>Output:</strong> </p> <pre> array([ 0, 1, 2, 3, 4, 5, 30, 35, 40, 45, 50, 55]) </pre> <h3>Example 2: For multidimensional array</h3> <pre> import numpy as np a=np.arange(12) b=np.where([[True, False], [True, True]],[[1, 2], [3, 4]],[[9, 8], [7, 6]]) b </pre> <p> <strong>Output:</strong> </p> <pre> array([[1, 8], [3, 4]]) </pre> <h3>Example 3: Broadcasting x, y, and condition</h3> <pre> import numpy as np x, y = np.ogrid[:3, :4] a=np.where(x &gt; y, x, 10 + y) a </pre> <p> <strong>Output:</strong> </p> <pre> array([[10, 11, 12, 13], [ 1, 11, 12, 13], [ 2, 2, 12, 13]]) </pre> <p> <strong>In the above code</strong> </p> <ul> <li>We have imported numpy with alias name np.</li> <li>We have created an array &apos;a&apos; using np.arange() function. </li> <li>We declared the variable &apos;b&apos; and assigned the returned value of np.where() function.</li> <li>We have passed a multidimensional array of boolean as a condition and x and y as an integer arrays.</li> <li>Lastly, we tried to print the value of b.</li> </ul> <p>In the output, the x value has been compared to y value if it satisfied the condition, then it will be printed x value otherwise, it will print y value, which has passed as an argument in the where() function.</p> <h3>Example 4: Broadcasting specific value</h3> <pre> x=np.array([[0,1,2],[0,2,5],[0,4,8]]) y=np.where(x<4,x,-2) y < pre> <p> <strong>Output:</strong> </p> <pre> array([[ 0, 1, 2], [ 0, 2, -2], [ 0, -2, -2]]) </pre> <hr></4,x,-2)></pre></6,a,5*a)>

例 2: 多次元配列の場合

 import numpy as np a=np.arange(12) b=np.where([[True, False], [True, True]],[[1, 2], [3, 4]],[[9, 8], [7, 6]]) b 

出力:

 array([[1, 8], [3, 4]]) 

例 3: x、y、および条件をブロードキャストする

 import numpy as np x, y = np.ogrid[:3, :4] a=np.where(x &gt; y, x, 10 + y) a 

出力:

 array([[10, 11, 12, 13], [ 1, 11, 12, 13], [ 2, 2, 12, 13]]) 

上記のコードでは

  • numpy をエイリアス名 np でインポートしました。
  • np.arange() 関数を使用して配列 'a' を作成しました。
  • 変数「b」を宣言し、np.where() 関数の戻り値を割り当てました。
  • ブール値の多次元配列を条件として渡し、x と y を整数配列として渡しました。
  • 最後に、b の値を出力してみました。

出力では、条件を満たしている場合は x 値が y 値と比較され、条件を満たしていない場合は x 値が出力され、それ以外の場合は where() 関数の引数として渡された y 値が出力されます。

例 4: 特定の値をブロードキャストする

 x=np.array([[0,1,2],[0,2,5],[0,4,8]]) y=np.where(x<4,x,-2) y < pre> <p> <strong>Output:</strong> </p> <pre> array([[ 0, 1, 2], [ 0, 2, -2], [ 0, -2, -2]]) </pre> <hr></4,x,-2)>