【Numpy入門 np.ones】配列の全要素を1で初期化するones関数の使い方

こんにちは!インストラクターのフクロウです!

Pythonの行列計算ライブラリNumPyでは配列を初期化する関数がたくさんあります。その中から、この記事では配列の全要素を1で初期化するnp.ones関数について紹介します。

また、配列を0で初期化するnp.zeros関数については、以下の記事で解説しています。

【NumPy入門 np.zeros】0で初期化した配列を作るzeros関数の使い方
更新日 : 2020年5月8日

np.onesの引数と返り値

numpy.ones(shape, dtype=float, order='C')

shapeとdtype(要素の型)を指定して、1で埋められた配列を返します

Parameters:
shape : int型かint型のtuple

新しい配列のshapeです。 例, (2, 3) or 2.

dtype : データ型, このパラメータはオプションなので、指定しなくてもOKです。

新しい配列のデータ型を指定します。, 例, numpy.int8などを指定します。 デフォルトでは numpy.float64.

order : {‘C’, ‘F’}, このパラメータはオプションです。デフォルトでは‘C’

多次元配列を行優先 (C-style) か列優先 (Fortran-style) でメモリに格納するかを指定します。

Returns:
out : ndarray

パラメータで指定した条件で0初期化された配列を返します。

使い方

jupyter-labjupyter-notebookを使って、以下のコードを試してみてください。

In [1]:
import numpy as np

基本的な配列の作り方

第一引数に新しく作りたい配列のshapeを指定すれば、簡単に配列が作成できます。

In [2]:
x = np.ones(5) 
x
Out[2]:
array([1., 1., 1., 1., 1.])

配列の情報をまとめて見るために、以下の関数を作っておきましょう。

In [3]:
def array_info(x): 
    print("配列のshape", x.shape) 
    print("配列の要素のデータ型", x.dtype) 
    print("配列の中身\n",x)
このarray_info関数で先程作った配列を見てみると、要素が5つもつ配列ができていることがわかりますね。

また、前述の通り、dtypeを指定していない場合は、float64型になることがわかります。

In [4]:
array_info(x)
Out:
配列のshape (5,)
配列の要素のデータ型 float64
配列の中身
 [1. 1. 1. 1. 1.]
同じようにして、4x3の配列を作ります。タプルで指定してあげるだけです。
In [5]:
x2 = np.ones((4,3)) 
array_info(x2)
Out:
配列のshape (4, 3)
配列の要素のデータ型 float64
配列の中身
 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

三次元配列も同様にタプルでshapeを指定して作ります。

In [6]:
x3 = np.ones((4,3,2)) 
array_info(x3)
Out:
配列のshape (4, 3, 2)
配列の要素のデータ型 float64
配列の中身
 [[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]

要素の型を指定して配列を作る方法

dtypeというパラメータに、numpy.float32などの型を指定することで、任意の型で1初期化できます。

In [7]:
x4 = np.ones(3, dtype=np.int16) 
array_info(x4)
Out
配列のshape (3,)
配列の要素のデータ型 int16
配列の中身
 [1 1 1]

真偽値(bool)でも可能です。この場合は1の代わりにTrueで埋められた配列ができます。

In [8]:
x5 = np.ones(3, dtype=np.bool) 
array_info(x5)
Out:
配列のshape (3,)
配列の要素のデータ型 bool
配列の中身
 [ True  True  True]

ある配列と同じshapeの1初期化配列を作るnp.ones_like

np.onesと似た関数に、np.ones_like関数があります。この関数は第一引数にshapeではなく、shapeを真似たい配列を指定してあげると、np.onesと同じように1初期化した配列を作ってくれます。

In [9]:
x6 = np.ones_like((x3)) 
array_info(x6)
Out:
配列のshape (4, 3, 2)
配列の要素のデータ型 float64
配列の中身
 [[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]

np.onesとnp.ones_likeのように、np.zerosにもnp.zeros_likeという同様の動作をする関数が用意されています。

まとめ

この記事ではNumPyで1初期化した配列を生成する関数、np.onesとnp.ones_likeを紹介しました。

NumPyは高速に行列計算を行うためには必須のライブラリです。この記事で配列の初期化を勉強して、様々な科学計算の実装・機械学習の実装に挑戦してみてください!

今回の記事は下記の記事を参考にしています。
参考記事:

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。