8181yuuta のすべての投稿

関数numpy.logspaceの使い方の例

関数の機能:等比数列の配列を作成
(初項と最終項を底とべき指数を指定)

例1 : 初項21, 最終項24, 要素数4の等比数列

>>> np.logspace(1, 4, num=4, base=2)
array([ 2.,  4.,  8., 16.])
キーワード無しパラメータの意味は、前から順にstart,stopで、初項 = basestart、最終項 = basestopとなります。
start : 初項のべき指数
stop : 最終項のべき指数
num : 要素数
base : 底
関連項目
関数numpy.arangeの使い方の例
関数numpy.linspaceの使い方の例
関数numpy.geomspaceの使い方の例

関数numpy.linspaceの使い方の例

関数の機能:要素数を指定して等差数列の配列を作成

例1 : 初項0, 最終項10, 要素数6の等差数列

>>> np.linspace(0, 10, num=6)
array([ 0.,  2.,  4.,  6.,  8., 10.])
キーワード無しパラメータの意味は、前から順にstart,stopです。
start : 初項の値
stop : 最終項の値
パラメータ num は要素数です。
関連項目
関数numpy.arangeの使い方の例
関数numpy.logspaceの使い方の例
関数numpy.geomspaceの使い方の例

関数numpy.geomspaceの使い方の例

関数の機能:等比数列の配列を作成(初項と最終項と要素数を指定)

例1 : 初項2, 最終項16, 要素数4の等比数列

>>> np.geomspace(2, 16, num=4)
array([ 2.,  4.,  8., 16.])
キーワード無しパラメータは、前から順にstart,stopです。
start : 初項
stop : 最終項
num : 要素数
関連項目
関数numpy.arangeの使い方の例
関数numpy.linspaceの使い方の例
関数numpy.logspaceの使い方の例

関数numpy.arrayの使い方の例

関数の機能:リストやタプルで値を指定して配列を作成

例1 : リストで値を指定して配列を作る

>>> np.array([3.4, 2.5, 4.3])
array([3.4, 2.5, 4.3])

例2 : タプルで値を指定して3×4要素の2次元配列を作る

>>> np.array(((0, 1, 2, 3),
	      (4, 5, 6, 7),
	      (8, 9, 10, 11)))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
関連項目
関数numpy.zerosの使い方の例
関数numpy.onesの使い方の例
関数numpy.fullの使い方の例

関数numpy.onesの使い方の例

関数の機能:全要素の値が1の配列を作成

例1 : 3要素の1次元配列を作る

>>> np.ones(3)
array([1., 1., 1.])

例2 : 3×4要素の2次元配列を作る

>>> np.ones((3, 4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

例3 : 整数型の配列を作る

>>> np.ones(3, dtype=int)
array([1, 1, 1])
関連項目
関数numpy.zerosの使い方の例
関数numpy.fullの使い方の例
関数numpy.arrayの使い方の例

関数numpy.fullの使い方の例

関数の機能:全要素が指定値の配列を作成

例1 : 要素の値が5.3の3要素の1次元配列を作る

>>> np.full(3, 5.3)
array([5.3, 5.3, 5.3])

例2 :要素の値が5.3の3×4要素の2次元配列を作る

>>> np.full((3, 4), 5.3)
array([[5.3, 5.3, 5.3, 5.3],
       [5.3, 5.3, 5.3, 5.3],
       [5.3, 5.3, 5.3, 5.3]])
関連項目
関数numpy.zerosの使い方の例
関数numpy.onesの使い方の例
関数numpy.arrayの使い方の例

関数numpy.arangeの使い方の例

関数の機能:公差を指定して等差数列の配列を作成

例1 : 初項4, 公差2で10未満の等差数列

>>> np.arange(4, 10, 2)
array([4, 6, 8])
パラメータの意味は、前から順にstart,stop,stepです。
start : 初項の値
stop : 最終項がこの値未満
step : 公差

例2 : 初項0, 公差1で5未満の等差数列

>>> np.arange(5)
array([0, 1, 2, 3, 4])
パラメータを1つだけ指定するとstopのみを指定したことになり、startとstepは下記のデフォルト値になります。
start = 0
step = 1

例3 : 初項2, 公差1で7未満の等差数列

>>> np.arange(2, 7)
array([2, 3, 4, 5, 6])
パラメータを2つだけ指定するとstartとstepを指定したことになり、stepは下記のデフォルト値になります。
step = 1
関連項目
関数numpy.linspaceの使い方の例
関数numpy.logspaceの使い方の例
関数numpy.geomspaceの使い方の例

関数numpy.zerosの使い方の例

関数の機能:全要素の値が0の配列を作成

例1 : 3要素の1次元配列を作る

>>> np.zeros(3)
array([0., 0., 0.])

例2 : 3×4要素の2次元配列を作る

>>> np.zeros((3, 4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

例3 : 整数型の配列を作る

>>> np.zeros(3, dtype=int)
array([0, 0, 0])
関連項目
関数numpy.onesの使い方の例
関数numpy.fullの使い方の例
関数numpy.arrayの使い方の例

ndarrayの条件を満たす要素の数を数える方法

ndarrayにおいて、与えられた条件を満たしている要素数を数える方法について説明します。forループやif文を使わず、比較演算子や関数の組み合わせで実現できます。

例として、10要素の乱数の入った配列を作ります。

>>> a = np.random.rand(10)
>>> a
array([0.54358044, 0.38524248, 0.24264256, 0.2426617 , 0.60402979, 0.21981407, 0.31785058, 0.28379446, 0.61343865, 0.94650637])

配列aの中で0.5を超える要素数を数えるにはどうプログラムを記述すれば良いでしょうか。

配列aを比較演算子で0.5と比較すると、下記のような0.5を超えている箇所がTrueでそれ以外がFalseのブール型配列が生成されます。

>>> a > 0.5
array([ True, False, False, False, True, False, False, False, True, True])

ndarrayには合計値を求めるsumメソッドが用意されています。今回、これを使用する方法を紹介します。

sumメソッドは、ブール型配列の場合にはTrueが1とカウントされる仕様となっていますので、上記のブール型配列にsumメソッドを使えば、条件を満たす要素数を数えることができます。

プログラムの記述は下記のようになります。

>>> (a > 0.5).sum()
4
関連項目
関数ndarray.sumの使い方の例
  

ndarrayの要素の値を条件に従って変更する方法

forループを使わずにndarrayの要素のうちある条件を満たすもののみを変更する方法を紹介します。大きな配列を扱う場合の処理速度はforループを使うより圧倒的に高速です。

ブーリアンマスクを使う方法

>>> a = np.array([7, 2, 4, 8, 3])
>>> a
array([7, 2, 4, 8, 3])

例として、上記のような配列に対して、 5より大きい要素を5に修正したいとします。ここでは、ブーリアンマスクを使用する方法を紹介します。

>>> mask = a > 5
>>> mask
array([ True, False, False,  True, False])

配列aを比較演算子で5と比較することによって、配列aと同じ大きさのブール型の配列が作成されました。5より大きい要素の箇所がTrueになっていることが分かります。

このブール型配列をインデックス演算子[ ]の中に入れて配列aの後ろに記述することで、5より大きい要素にのみを修正することができます。

>>> a[mask] = 5
>>> a
array([5, 2, 4, 5, 3])

なお、上記のブール型の配列maskは使うのが1回きりなので、わざわざmaskという名前を付けずに、 以下のようにまとめて書いてもOKです。

>>> a = np.array([7, 2, 4, 8, 3])
>>> a[a > 5] = 5
>>> a
array([5, 2, 4, 5, 3])

応用例1

5より大きい要素のみ2倍にする。

>>> a = np.array([7, 2, 4, 8, 3])
>>> a[a > 5] *= 2
>>> a
array([14,  2,  4, 16,  3])

応用例2

配列aの中で5より大きい要素にのみ別の配列bの値を加える。

>>> a = np.array([7, 2, 4, 8, 3])
>>> b = np.array([3, 4, 5, 6, 7])
>>> mask = a > 5
>>> a[mask] += b[mask]
>>> a
array([10,  2,  4, 14,  3])

numpy.whereを使う方法

次にnumpyの関数whereを使う方法を紹介します。

>>> a = np.array([7, 2, 4, 8, 3])
>>> np.where(a > 5, 5, a)
array([5, 2, 4, 5, 3])

上記のプログラムの2行目では、配列aのうち5を超える要素は5に、その他の要素はそのままの値とした配列を生成しています。

where関数に与えるパラメータは(condition, [x, y])となっており、conditionのところにブール型の配列を指定すると、Trueの要素はxに、Falseの要素はyになります。x,yはconditionと同じ大きさの配列か、conditionの配列にブロードキャステキングが可能なオブジェクトを指定することができます。

関連項目
配列(ndarray)の部分要素へのアクセス