NumPyは、Pythonで数値計算を行うためのライブラリです。NumPyを使うと、効率的な数値計算に不可欠な多次元配列を簡単に作成・操作できます。この記事では、NumPyで1で初期化された配列を生成するためのones関数の基本的な使い方、そしてones_like関数との使い分けについて解説します。
onesの基本的な使い方
ones関数は、指定した形状(shape)とデータ型(dtype)を持つ、すべての要素が1で初期化された配列を生成します。
最もシンプルな例
import numpy as np # 形状が(2, 3)の2次元配列を生成 arr = np.ones((2, 3)) print(arr)
このコードでは、np.ones((2, 3))によって、2行3列の2次元配列が生成され、arr変数に格納されます。ones関数はデフォルトでfloat64型の1を生成します。
出力
[[1. 1. 1.] [1. 1. 1.]]
形状の指定
ones関数の最初の引数には、生成したい配列の形状をタプルで指定します。
# 5つの要素を持つ1次元配列 arr1 = np.ones(5) print(arr1) # 3x4x2の3次元配列 arr2 = np.ones((3, 4, 2)) print(arr2)
出力
[1. 1. 1. 1. 1.] [[[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引数で、配列のデータ型を指定できます。デフォルトはfloat64です。
# int型の配列 arr_int = np.ones((2, 2), dtype=int) print(arr_int) # complex型の配列 arr_complex = np.ones((2, 2), dtype=complex) print(arr_complex)
出力
[[1 1] [1 1]] [[1.+0.j 1.+0.j] [1.+0.j 1.+0.j]]
メモリレイアウトの指定(order)
order引数を使うと、多次元配列のメモリ上での配置順序を指定できます。
'C'(C言語スタイル)を選ぶと行優先、'F'(Fortranスタイル)を選ぶと列優先になります。デフォルトは'C'です。
通常意識する必要はありませんが、特定の計算ライブラリと連携する際に、パフォーマンスに影響することがあります。
# Fortranスタイルの配列 arr_f = np.ones((2, 3), order='F')
ones_likeの使い方
ones_like関数は、既存の配列と同じ形状とデータ型を持つ、1で初期化された配列を生成します。
# 既存の配列 arr = np.array([[1, 2, 3], [4, 5, 6]]) # arrと同じ形状とデータ型の1で埋められた配列を生成 arr_ones = np.ones_like(arr) print(arr_ones)
出力
[[1 1 1] [1 1 1]]
ones_likeは、既存の配列の形状や型を明示的に指定せずに、それらを引き継いだ新しい配列を作成したい場合に便利です。
ones と ones_like の使い分け
| 機能 | ones |
ones_like |
|---|---|---|
| 新規配列の生成 | ○ | ○ |
| 形状の指定 | 必要 | 不要(既存配列から取得) |
| データ型の指定 | 可能 | 不要(既存配列から取得) |
ones: 配列の形状とデータ型を明示的に指定して、新しい配列を作成する場合ones_like: 既存の配列と同じ形状とデータ型を持つ配列を作成する場合
まとめ
NumPyのonesとones_likeは、1で初期化された配列を生成します。onesは形状やデータ型を直接指定するのに対し、ones_likeは既存の配列を基にする点が異なります。これらの関数を使い分けることで、NumPyを使った数値計算を効率的に行えます。
0で初期化された配列を生成するNumpyのzerosについては、下記の記事で解説しています。