8181yuuta のすべての投稿

関数ndarray.flattenの使い方の例

関数の機能:次元を1に落とした配列を返却

>>> a = np.array([[0, 1],
	          [2, 3]])
>>> a.flatten()
array([0, 1, 2, 3])

上のようにパラメータを指定しないと、行を優先した並びとなりますが、order=’F’と指定すると列を優先した並びとなります。

>>> a.flatten(order='F')
array([0, 2, 1, 3])
関連項目
関数ndarray.ravelの使い方の例
関数ndarray.reshapeの使い方の例
関数ndarray.resizeの使い方の例
関数ndarray.squeezeの使い方の例
属性ndarray.ndimの使い方の例
属性ndarray.shapeの使い方の例
属性ndarray.size, ndarray.itemsize, ndarray.nbyteの使い方の例
属性ndarray.stridesの使い方の例

関数ndarray.diagonalの使い方の例

関数の機能:対角要素の配列を返却

>>> a = np.array([[15,  6,  2],
	          [-2, 16,  7],
	          [-8, -3, 17]])
>>> a.diagonal()
array([15, 16, 17])
>>> a.diagonal(offset=1)
array([6, 7])
>>> a.diagonal(offset=2)
array([2])
>>> a.diagonal(offset=-1)
array([-2, -3])
>>> a.diagonal(offset=-2)
array([-8])
offsetのデフォルト値は0で、offset=0なら主対角線上の要素が返却されます。プラスなら右上に、マイナスなら左下に主対角線からずれた位置の対角要素が返却されます。
関連項目
関数ndarray.traceの使い方の例

関数ndarray.cumsumと関数ndarray.cumprodの使い方の例

cumsumの機能:指定した軸方向の累計を返却

sumprodの機能:指定した軸方向の累計積を返却

例1 : 1次元の配列の場合

>>> a = np.array([5, 4, 6, 3, 7])
>>> a.cumsum()
array([ 5,  9, 15, 18, 25])
>>> a.cumprod()
array([   5,   20,  120,  360, 2520])

例2 : 2次元の配列の場合

>>> a = np.array([[3, 5, 7],
	          [6, 8, 1],
	          [4, 1, 7]])
>>> a.cumsum(axis=0)
array([[ 3,  5,  7],
       [ 9, 13,  8],
       [13, 14, 15]])
>>> a.cumsum(axis=1)
array([[ 3,  8, 15],
       [ 6, 14, 15],
       [ 4,  5, 12]])
>>> a.cumprod(axis=0)
array([[ 3,  5,  7],
       [18, 40,  7],
       [72, 40, 49]])
>>> a.cumprod(axis=1)
array([[  3,  15, 105],
       [  6,  48,  48],
       [  4,   4,  28]])
関連項目
関数ndarray.prodの使い方の例
関数ndarray.sumの使い方の例
関数ndarray.traceの使い方の例

関数ndarray.copyの使い方の例

関数の機能:配列のコピーを返却

例 : 整数型から浮動小数点型へ変換

>>> a = np.array([0, 1, 2])
>>> b = a.copy()
>>> a
array([0, 1, 2])
>>> b
array([0, 1, 2])

配列bは配列aとは別のオブジェクトなので、配列bの要素を変更しても配列aには影響しません。

>>> b[2]=10
>>> a
array([0, 1, 2])
>>> b
array([ 0,  1, 10])

ところが、copy関数を使わずに単にb=aと書くと、配列aにbという別名を付けたことになります。なので、bの中身を変更するとaの中身を変更したことになります。

>>> b = a
>>> b[2] = 10
>>> a
array([ 0,  1, 10])
関連項目
関数ndarray.viewの使い方の例

関数ndarray.clipの使い方の例

関数の機能:最小値と最大値を指定して要素の値を切り揃えた配列を返却

>>> a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.clip(2, 7)
array([2, 2, 2, 3, 4, 5, 6, 7, 7, 7])
>>> a.clip(1, 5)
array([1, 1, 2, 3, 4, 5, 5, 5, 5, 5])
clip関数の1つ目のパラメーターが最小値、2つ目のパラメーターが最大値です。
指定した最小値以下だった要素は指定した最小値になり、指定した最大値以上だった要素は指定した最大値になり、その他の要素は元の値のまま、の配列が返却されます。

関数ndarray.chooseの使い方の例

関数の機能: 配列の各要素の値をインデックスとして、別の配列から値を選択して配列を作成し返却

下記の例では、「別の配列」の名前をchoicesとしています。

例1 : choises が1次元の配列の場合

>>> a = np.array([[1, 2, 0],
	          [4, 0, 1]])
>>> choices = np.array([0.3, 1.2, 2.1, 3.4, 4.6])
>>> a.choose(choices)
array([[1.2, 2.1, 0.3],
       [4.6, 0.3, 1.2]])

例2 : choises のサイズ以上のインデックス値がある場合

>>> a = np.array([1, 3, 0])
>>> choices = np.array([0.3, 1.2, 2.1])
>>> a.choose(choices)
Traceback (most recent call last):
    a.choose(choices)
ValueError: invalid entry in choice array
choisesのインデックスは0〜2の範囲であるにも関わらず、配列aの2つ目の要素がこの範囲外である3であったため、エラーが発生しました。
choose関数のパラメーターmodeを'wrap'か'clip'にすると、インデックスの値を下記のように変えて処理が行われます。

mode = 'wrap' : ind % n に変更
mode = 'clip' : indが負の値なら0に、n以上ならn-1に変更

ここで、インデックス値はindとし、choicesのインデックスの範囲は[0, n-1]としています。
>>> a = np.arange(-5,5)
>>> a
array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4])
>>> a.choose(choices, mode='wrap')
array([1.2, 2.1, 0.3, 1.2, 2.1, 0.3, 1.2, 2.1, 0.3, 1.2])
>>> a.choose(choices, mode='clip')
array([0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 1.2, 2.1, 2.1, 2.1])

例3 : choices が2次元の配列の場合

>>> a = np.array([2,0,1])
>>> choices = np.array([[0, 1, 2],
		        [3, 4, 5],
		        [6, 7, 8]])
>>> a.choose(choices)
array([6, 1, 5])
関連項目
関数ndarray.compressの使い方の例
関数ndarray.takeの使い方の例

関数ndarray.argsortの使い方の例

関数の機能:配列の要素を昇順に並べ替えたときのインデックスを返却

例1 : 1次元の配列の場合

>>> a = np.array([4, 2, 9, 3, 6])
>>> a.argsort()
array([1, 3, 0, 4, 2])

例2 : 2次元の配列の場合

>>> a = np.array([[8, 1, 5],
	          [6, 3, 2]])
>>> a.argsort(axis=0)
array([[1, 0, 1],
       [0, 1, 0]])
>>> a.argsort(axis=1)
array([[1, 2, 0],
       [2, 1, 0]])
関連項目
関数ndarray.sortの使い方の例